@rex0220/kintone-sql-tools 3.56.2 → 3.56.3
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
|
@@ -96,6 +96,8 @@ env -u KSQL_USERNAME -u KSQL_PASSWORD npm test
|
|
|
96
96
|
|
|
97
97
|
言語リファレンス・レシピは MCP resources(`ksql://language-reference` / `ksql://recipes`)に加えて、read-only ツール **`ksql_docs`** でも読めます。中継環境(リモート接続のプロキシ等)が resources を通さないクライアントでは、`ksql_docs` を引数なしで呼ぶと全章キーの索引が返るので、必要な章だけ `{"section":"language-reference/05-string-number-functions"}` の形で取得してください。
|
|
98
98
|
|
|
99
|
+
**今つながっている MCP が何版かは、`ksql_docs` を引数なしで呼ぶと索引の先頭行で分かります**(v3.56.3〜)。**MCP は常駐プロセスなので、`npm install` してもクライアントを再読み込みするまで差し替わりません。**`ksql.js --version` は別プロセス(CLI)の版なので、常駐 MCP の版とは食い違うことがあります。**測定結果が期待と違うときは、まず索引の先頭行で版を確かめてください。**
|
|
100
|
+
|
|
99
101
|
注意:
|
|
100
102
|
|
|
101
103
|
- `APP@profile` と `LAPP_<NAME>[@profile]` は Node.js runtime(CLI / MCP)の拡張です。plugin 側では非対応です。
|
package/dist-engine/index.cjs
CHANGED
|
@@ -14,4 +14,4 @@ WHERE \u3092 AND \u306E\u5B89\u5168\u306A KLIKE \u6761\u4EF6\u3078\u66F8\u304D\u
|
|
|
14
14
|
`));return typeof n.code=="string"&&n.code!==""&&(i.name=n.code),typeof n.code=="string"&&Object.assign(i,{code:n.code}),typeof n.status=="number"&&Object.assign(i,{status:n.status}),Object.assign(i,{cause:e}),i}async function wT(e){try{let t=await e.json();if(t!==null&&typeof t=="object"){let r=t;return hi({code:r.code,message:r.message,errors:r.errors,status:e.status})}let n=new Error(`kintone API error: HTTP ${e.status}`);return Object.assign(n,{status:e.status,cause:t}),hi(n)}catch(t){let n=new Error(`kintone API error: HTTP ${e.status} \u306E\u5FDC\u7B54\u3092 JSON \u3068\u3057\u3066\u89E3\u6790\u3067\u304D\u307E\u305B\u3093`);return Object.assign(n,{status:e.status,cause:t}),hi(n)}}function bT(e){let t=e;return t?.code==="GAIA_CN01"&&(t.status===404||t.status===void 0)}async function fn(e,t,n){try{return await kintone.api(Cu(e),t,n)}catch(r){throw hi(r)}}function PT(e){if(!Number.isSafeInteger(e)||e<1||e>5)throw new Error("ArgumentError: cursorMaxActive must be an integer from 1 to 5.")}function ME(e={}){let t=e.cursorMaxActive??TT;PT(t);let n=null,r=null,i=new Set;return{async getRecords(a){try{let s=IT(a),l=await fetch(s.url,s.init);if(!l.ok)throw await wT(l);let d=await l.json();return UE(l.headers.get("X-Cybozu-Warning"))?{...d,searchAborted:!0}:d}catch(s){throw hi(s)}},async openCursor(a){let s=Cu(Na),l=new URL(s,globalThis.location?.href).host.toLowerCase();if(r!==null&&r!==l)throw new Error(`CursorRouteError: factory route changed from ${r} to ${l}.`);if(r=l,n??=new ba(l,{maxActive:t}),n.snapshot().active>=t){let R=new Error(`CursorCapacityError: host=${l} \u306E active cursor \u4E0A\u9650 ${t} \u306B\u9054\u3057\u3066\u3044\u307E\u3059\u3002`);throw R.name="CursorCapacityError",R}let d=await n.acquire(),c;try{c=await n.runCreate(()=>fn(Na,"POST",{app:a.app,query:a.query,size:a.size,fields:a.fields&&a.fields.length>0?a.fields:void 0}))}catch(R){throw typeof R?.code=="string"?(d.release(),R):(d.quarantine(),new vo(R))}let u=c.id,p=LE(Number(c.totalCount),{get:()=>fn(Na,"GET",{id:u}),delete:()=>fn(Na,"DELETE",{id:u}),isAlreadyReleasedError:bT,onReleased:()=>d.release(),onReleaseUnknown:()=>d.quarantine()}),f=null,E={totalCount:p.totalCount,async nextPage(){let R=await p.nextPage();return R.next||i.delete(E),R},close(){return f||(f=p.close().finally(()=>{i.delete(E)}),f)}};return i.add(E),E},async getApps(){let s=[],l=0;for(;;){let d=await fn("/k/v1/apps.json","GET",{limit:100,offset:l});for(let c of d.apps)s.push({appId:Number(c.appId),name:c.name,description:c.description});if(d.apps.length<100)break;l+=100}return s},async getFields(a){let s=await fn("/k/v1/app/form/fields.json","GET",{app:a});return _E(s.properties)},async getNumberPrecision(a){let s=await fn("/k/v1/app/settings.json","GET",{app:a});return Np(s)},async getProcessStatuses(a){let s=await fn("/k/v1/app/status.json","GET",{app:a,lang:"user"});return{enable:s.enable,states:vE(s.states)}}}}var FE=new Set(["postRecords","putRecords","deleteRecords"]),Ai=class extends Error{constructor(t){let n=t instanceof Error?t.message:String(t);super(n),this.name="ClientOperationError",this.cause=t,Object.setPrototypeOf(this,new.target.prototype)}};async function xt(e){try{return await e()}catch(t){throw new Ai(t)}}function NT(e){return()=>{throw $e(`${String(e)} is blocked by the readonly client`)}}function Jn(e){let t=e.getRecords.bind(e),n=e.openCursor.bind(e),r=e.getApps.bind(e),i=e.getFields.bind(e),o=e.getNumberPrecision.bind(e),a=e.getProcessStatuses.bind(e),s=Object.assign(Object.create(null),{getRecords:async l=>{let d=await xt(()=>t(l));if(d.searchAborted===!0)throw OE();return d},openCursor:async l=>{let d=await xt(()=>n(l)),c=d.nextPage.bind(d),u=d.close.bind(d);return{totalCount:d.totalCount,nextPage:()=>xt(()=>c()),close:()=>xt(()=>u())}},getApps:()=>xt(()=>r()),getFields:l=>xt(()=>i(l)),getNumberPrecision:l=>xt(()=>o(l)),getProcessStatuses:l=>xt(()=>a(l))});return new Proxy(s,{get(l,d,c){return FE.has(d)?NT(d):Reflect.get(l,d,c)},has(l,d){return FE.has(d)?!1:Reflect.has(l,d)}})}function CT(e){let t=new Set,n=null;return{client:{getRecords:e.getRecords.bind(e),async openCursor(i){let o=await e.openCursor.call(e,i),a=null,s={totalCount:o.totalCount,nextPage:o.nextPage.bind(o),close(){return a||(a=Promise.resolve().then(()=>o.close()).finally(()=>{t.delete(s)}),a)}};return t.add(s),s},getApps:e.getApps.bind(e),getFields:e.getFields.bind(e),getNumberPrecision:e.getNumberPrecision.bind(e),getProcessStatuses:e.getProcessStatuses.bind(e)},close(){return n||(n=(async()=>{let o=(await Promise.allSettled([...t].map(a=>a.close()))).find(a=>a.status==="rejected");if(o)throw new Ai(o.reason)})(),n)}}}async function Qn(e,t){let n=CT(e),r=!1;try{return await t(n.client)}catch(i){throw r=!0,i}finally{try{await n.close()}catch(i){if(!r)throw i}}}var OT="A-Za-z",LT="\\u3040-\\u30FF\\u3400-\\u9FFF\\uF900-\\uFAFF\\uFF01-\\uFF60",Lu=`${OT}${LT}`,KE=`${Lu}0-9_`,_T=new RegExp(`^[${Lu}]$`,"u"),DT=new RegExp(`^[${KE}]$`,"u"),vT=new RegExp(`^[${Lu}][${KE}]{0,63}$`,"u");function UT(e){return _T.test(e)}function kT(e){return DT.test(e)}function _u(e){let t=e.normalize("NFC").toUpperCase();if(!vT.test(t))throw new Error(`ArgumentError: logical app name "${e}" is invalid; expected 1-64 UTF-16 units starting with an ASCII letter or supported Japanese character.`);return t}function Ou(e){if(!e)return!1;let t=e.codePointAt(0);return t>=65&&t<=90||t>=97&&t<=122||t>=48&&t<=57||t===95||t===36||t>=12352&&t<=12543||t>=13312&&t<=40959||t>=63744&&t<=64255||t>=65281&&t<=65376}function MT(e){if(!e)return!1;let t=e.codePointAt(0);return t>=65&&t<=90||t>=97&&t<=122||t>=48&&t<=57||e==="_"||e==="-"||e==="."||e==="$"}function FT(e,t){let n=t>0?e[t-1]:"";if(Ou(n))return null;let r,i,o,a,s,l;if(e.slice(t,t+5).toUpperCase()==="LAPP_"){if(r="logical",l=t+5,a=l,!UT(e[l]??""))return null;for(l++;l<e.length&&kT(e[l]);)l++;s=l;try{o=_u(e.slice(a,s))}catch{return null}}else if(e.slice(t,t+3).toUpperCase()==="APP"){for(r="physical",l=t+3,a=l;l<e.length&&/[0-9]/.test(e[l]);)l++;if(s=l,s===a)return null;i=Number(e.slice(a,s))}else return null;if(e[l]==="$"){l++;let f=l;for(;l<e.length&&Ou(e[l]);)l++;if(l===f)return null}let d=l,c=null;if(e[l]==="@"){l++;let f=l;for(;l<e.length&&MT(e[l]);)l++;if(l===f)return null;c=e.slice(f,l)}let u=l<e.length?e[l]:"";if(Ou(u))return null;let p={profile:c,start:t,referenceValueStart:a,referenceValueEnd:s,appEnd:d,fullEnd:l};return r==="physical"?{...p,source:r,appId:i}:{...p,source:r,logicalName:o}}function Du(e){let t=[],n=0;for(;n<e.length;){let r=e[n];if(r==="'"){for(n++;n<e.length;){if(e[n]==="'"){if(n++,n<e.length&&e[n]==="'"){n++;continue}break}n++}continue}if(r==="`"){for(n++;n<e.length&&e[n]!=="`";)n++;n<e.length&&n++;continue}if(r==="-"&&e[n+1]==="-"){for(n+=2;n<e.length&&e[n]!==`
|
|
15
15
|
`;)n++;continue}if(r==="/"&&e[n+1]==="*"){for(n+=2;n<e.length;){if(e[n]==="*"&&e[n+1]==="/"){n+=2;break}n++}continue}let i=FT(e,n);if(!i){n++;continue}t.push(i),n=i.fullEnd}return t}function xE(e){let t=9e8;for(;e.has(t);)t++;return e.add(t),t}function BE(e,t="dev",n){let r=Du(e),i=r.some(g=>g.profile!==null),o=new Map,a=g=>g??t;for(let g of r){if(g.source!=="physical")continue;let y=a(g.profile),m=o.get(g.appId);m||(m=new Set,o.set(g.appId,m)),m.add(y.toLowerCase())}let s=new Set(r.filter(g=>g.source==="physical").map(g=>g.appId)),l=new Map;for(let g of r){if(g.source!=="logical")continue;let y=a(g.profile).toLowerCase(),m=`logical:${g.logicalName}@${y}`;if(l.has(m))continue;if(!n)throw new Error(`ArgumentError: logical app LAPP_${g.logicalName}@${y} requires logicalApps configuration.`);let h=n.resolveLogicalApp(g.logicalName,y);l.set(m,h),s.add(h)}let d=new Map,c=new Map;for(let[g,y]of o.entries()){let m=[...y].sort();if(!(m.length<=1))for(let h of m){let S=xE(s);d.set(`physical:${g}@${h}`,S),c.set(S,{source:"physical",mappedAppId:S,appId:g,profile:h})}}let u=[],p=[],f=0,E=0,R=(g,y,m,h)=>{if(!g&&y===m)return;let S=f;u.push(g),f+=g.length,p.push({normalizedStart:S,normalizedEnd:f,sourceStart:y,sourceEnd:m,...h===void 0?{}:{bindingMappedAppId:h}})};for(let g of r){let y=a(g.profile).toLowerCase(),m;if(g.source==="physical")m={source:"physical",mappedAppId:d.get(`physical:${g.appId}@${y}`)??g.appId,appId:g.appId,profile:y};else{let I=`logical:${g.logicalName}@${y}`,w=d.get(I);w===void 0&&(w=xE(s),d.set(I,w)),m={source:"logical",logicalName:g.logicalName,mappedAppId:w,appId:l.get(I),profile:y}}c.set(m.mappedAppId,m),R(e.slice(E,g.start),E,g.start);let h=e.slice(g.referenceValueEnd,g.appEnd),S=g.source==="physical"?`${e.slice(g.start,g.referenceValueStart)}${m.mappedAppId}${h}`:`APP${m.mappedAppId}${h}`;R(S,g.start,g.fullEnd,m.mappedAppId),E=g.fullEnd}return R(e.slice(E),E,e.length),{normalizedSql:u.join(""),hasProfileSyntax:i,appBindingByMappedApp:c,rewriteSegments:p}}var GE=new Set(["client","logicalApps","maxRecords","fetchParallel","cursorMaxActive"]),$E=new Set([...GE,"onLimitReached"]),xT=new Set([...$E,"variables","tempTableMaxRows"]);function VE(e){if(e===null||typeof e!="object"||Array.isArray(e))throw new TypeError("options must be an object")}function Si(e,t){if(!Number.isSafeInteger(e)||e<=0)throw new RangeError(`${t} must be a positive safe integer`)}function WE(e){if(e===null||typeof e!="object")throw new TypeError("client is required");let t=e;for(let n of["getRecords","openCursor","getApps","getFields","getNumberPrecision","getProcessStatuses"])if(typeof t[n]!="function")throw new TypeError(`client.${n} must be a function`)}function KT(e){if(e===null||typeof e!="object"||Array.isArray(e))throw new TypeError("variables must be an object");for(let[t,n]of Object.entries(e))if(typeof n!="string")throw new TypeError(`variables.${t} must be a string`)}function HE(e){if(e===void 0)return;if(e===null||typeof e!="object"||Array.isArray(e))throw new TypeError("logicalApps must be an object");let t={};for(let[n,r]of Object.entries(e)){let i;try{i=_u(n)}catch{throw new TypeError(`logicalApps key "${n}" is invalid`)}if(Object.prototype.hasOwnProperty.call(t,i))throw new TypeError(`logicalApps key "${n}" duplicates "${i}" after canonical normalization`);Si(r,`logicalApps.${n}`),t[i]=r}return t}function YE(e,t,n){for(let r of Reflect.ownKeys(e))if(typeof r!="string"||!t.has(r))throw new TypeError(`Unknown ${n} option: ${String(r)}`);if(e.maxRecords!==void 0&&Si(e.maxRecords,"maxRecords"),e.fetchParallel!==void 0&&Si(e.fetchParallel,"fetchParallel"),e.cursorMaxActive!==void 0&&(Si(e.cursorMaxActive,"cursorMaxActive"),e.cursorMaxActive>5))throw new RangeError("cursorMaxActive must be between 1 and 5");if(e.onLimitReached!==void 0&&e.onLimitReached!=="error"&&e.onLimitReached!=="truncate")throw new TypeError('onLimitReached must be "error" or "truncate"');return{...e.maxRecords!==void 0?{maxRecords:e.maxRecords}:{},...e.fetchParallel!==void 0?{fetchParallel:e.fetchParallel}:{},...e.cursorMaxActive!==void 0?{cursorMaxActive:e.cursorMaxActive}:{},...e.onLimitReached!==void 0?{onLimitReached:e.onLimitReached}:{}}}function vu(e,t){VE(e);let n=t==="run"?$E:GE;WE(e.client);let r=YE(e,n,t==="run"?"runQuery":"explainQuery"),i=HE(e.logicalApps);return{client:e.client,...i===void 0?{}:{logicalApps:i},executeOptions:r}}function jE(e){VE(e),WE(e.client),e.variables!==void 0&&KT(e.variables),e.tempTableMaxRows!==void 0&&Si(e.tempTableMaxRows,"tempTableMaxRows");let t=YE(e,xT,"runBatch"),n=HE(e.logicalApps);return{client:e.client,...n===void 0?{}:{logicalApps:n},executeOptions:{...t,...e.variables!==void 0?{variables:e.variables}:{},...e.tempTableMaxRows!==void 0?{tempTableMaxRows:e.tempTableMaxRows}:{}}}}function Ca(e,t,n={}){let r=n.logicalAppDisplay??"profile";if(typeof e=="string"){let i=e.match(/^(\s*target:\s*)APP(\d+) \((\d+)\)\s*$/);if(i&&i[2]===i[3]){let s=t.get(Number(i[2]));if(s){let l=s.source==="logical"?r==="physical"?`LAPP_${s.logicalName} -> APP${s.appId}`:`LAPP_${s.logicalName} -> APP${s.appId}@${s.profile}`:r==="physical"?`APP${s.appId}`:`APP${s.appId}@${s.profile}`;return`${i[1]}${l}`}}if(t.size===0)return e;let o=[...t.keys()].sort((s,l)=>String(l).length-String(s).length),a=new RegExp(`APP(${o.join("|")})(?!\\d)(\\s+AS\\s+[^\\s()]+)?(?:\\s+\\(\\1\\))?`,"g");return e.replace(a,(s,l,d)=>{let c=t.get(Number(l));return`${c.source==="logical"?r==="physical"?`LAPP_${c.logicalName} -> APP${c.appId}`:`LAPP_${c.logicalName}@${c.profile}`:r==="physical"?`APP${c.appId}`:`APP${c.appId}@${c.profile}`}${d??""}`})}return Array.isArray(e)?e.map(i=>Ca(i,t,n)):e!==null&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([i,o])=>[i,Ca(o,t,n)])):e}function BT(e,t,n){return e.slice(t,n)}function Ti(e,t,n){let r=Du(e),i=r.find(d=>d.profile!==null);if(i!==void 0)throw new Error(`ArgumentError: browser engine library does not support @profile suffixes (${BT(e,i.start,i.fullEnd)}).`);if(!r.some(d=>d.source==="logical"))return{sql:e,client:t,logicalBindings:[]};let o=BE(e,"browser",{resolveLogicalApp(d){let c=n?.[d];if(c===void 0)throw new Error(`ArgumentError: logical app LAPP_${d} is not defined.`);return c}}),a=[...o.appBindingByMappedApp.values()].filter(d=>d.source==="logical"),s=d=>o.appBindingByMappedApp.get(d)?.appId??d,l={getRecords:d=>t.getRecords({...d,app:s(d.app)}),openCursor:d=>t.openCursor({...d,app:s(d.app)}),getApps:()=>t.getApps(),getFields:d=>t.getFields(s(d)),getNumberPrecision:d=>t.getNumberPrecision(s(d)),getProcessStatuses:d=>t.getProcessStatuses(s(d))};return{sql:o.normalizedSql,client:l,logicalBindings:a}}function Ii(e,t){if(t.length===0)return e;let n=t.map(r=>`LAPP_${r.logicalName} -> APP${r.appId}`).filter((r,i,o)=>o.indexOf(r)===i);return e.message=`${e.message} [logical apps: ${n.join(", ")}]`,e}function wi(e,t){if(t.length===0)return e;let n=new Map(t.map(r=>[r.mappedAppId,r]));return Ca(e,n,{logicalAppDisplay:"physical"})}function Oa(e){return{recordGetCalls:e?.getCalls??0,fetchedRows:e?.fetchedRows??0,elapsedMs:e?.elapsedMs??0,cursorRecordsScanned:e?.cursorRecordsScanned??0,limitReached:e?.limitReached??!1,limitReachedApps:e?[...e.limitReachedApps].sort((t,n)=>t-n):[]}}function GT(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,String(n)]))}function $T(e,t){let n=t?.get(e),r=n?.fieldType??n?.semantics?.fieldType,i=n?.semantics?.compareMode,o=n?.sortKind??(i==="number"||i==="string"?i:void 0),a=n?.publicSourceApp;return{name:e,displayName:n?.displayName??e,valueType:"string",...r!==void 0?{fieldType:r}:{},...o!==void 0?{sortKind:o}:{},...a!==void 0?{sourceApp:a}:{}}}function La(e,t=e.metrics){let n=If(e);return{type:"query",rows:e.rows.map(GT),columns:e.columns.map(r=>$T(r,n)),rowCount:e.rowCount,warnings:[...e.warnings??[]],...e.validateStats?{validateStats:e.validateStats}:{},metrics:Oa(t)}}function zE(e,t={}){let n=new Lt(e).tokenize(),r=new _t(n,t).parse();return We(r),r}function qE(e,t={}){let n=new Lt(e).tokenize(),r=new _t(n,t).parseStatements();return r.forEach(We),r}function Uu(e){let t=e.type==="EXPLAIN"?e.query:e;if(t.type!=="UPDATE"&&t.type!=="INSERT"&&t.type!=="UPSERT")return!1;let n=t;return["applyBlocks","onInsertApplyBlocks","onUpdateApplyBlocks"].some(r=>Array.isArray(n[r])&&n[r].length>0)}function XE(e){if(e instanceof se)return Xn(e.message,e);let t=dn(e);return t.code==="PARSE_ERROR"?t:Xn("SQL statement could not be parsed",e)}function VT(e){if(e.trim()==="")throw Xn("SQL statement is empty");try{return zE(e,{import:!0})}catch(t){let n=XE(t);throw n.message.includes("\u8907\u6587\u306F\u30D0\u30C3\u30C1\u5B9F\u884C API \u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044")?Xn("This API accepts one statement; use runBatch for multiple statements",t):n}}function JE(e){if(Li(e)==="UNKNOWN")throw $e("Unclassifiable statement is not allowed");return e}function QE(e){if(e.trim()==="")throw Xn("SQL statement is empty");try{return qE(e,{import:!0})}catch(t){throw XE(t)}}function WT(e){let t=JE(e),n=t.type;if(n==="IMPORT")throw $e("IMPORT is disabled by default in engine library queries");if(!yn(t))throw $e(`${n} statements are not read-only`);if(Uu(t))throw $e("APPLY statements are not allowed in engine library queries");if(!Wu(t))throw $e(`${n} does not return rows; use runBatch for batch-scoped or non-row-returning read-only statements`)}function ZE(e){let t=JE(e),n=t.type==="EXPLAIN"?t.query:t;if(n.type==="IMPORT")throw $e("IMPORT is disabled by default in engine library batches");if(!yn(n))throw $e(`${n.type} statements are not read-only`);if(Uu(n))throw $e("APPLY statements are not allowed in engine library batches");if(It(n.type))throw $e("DML VALIDATE ONLY statements are not supported by runBatch")}function eR(e){let t=VT(e);return WT(t),t}function tR(e){let t=QE(e);return t.forEach(ZE),t}function nR(e){let t=e.trim(),n=QE(t);n.forEach(ZE);let r=n[0],i=r.type==="EXPLAIN"?r.query:r;return n.length===1&&(i.type==="SELECT"||i.type==="WITH"||i.type==="UNION")?{statements:n,legacySql:r.type==="EXPLAIN"?t:`EXPLAIN ${t}`}:{statements:n}}function HT(e){let t=e.error,n=t?.cause!==void 0?dn(t.cause):new Ae("EXECUTION_ERROR",t?.message??`Statement ${e.index} failed`);return Nu(n,e.index,e.type)}async function rR(e,t){let n=[],r=[];try{let i=jE(t),o=Ti(e,i.client,i.logicalApps);r=o.logicalBindings,n=tR(o.sql);let a=await Qn(o.client,c=>_f(o.sql,Jn(c),{...i.executeOptions,captureColumnMeta:!0})),s=a.statements.find(c=>c.status==="error");if(s!==void 0)throw HT(s);let l=[],d=a.statements.map(c=>{let u={index:c.index,type:c.type,status:c.status};if(c.tempTable!==void 0&&(u.tempTable=c.tempTable),c.rowCount!==void 0&&(u.rowCount=c.rowCount),c.error!==void 0&&(u.error={code:c.error.code,message:c.error.message}),c.skippedReason!==void 0&&(u.skippedReason=c.skippedReason),c.status==="success"&&c.result?.type==="SELECT"){u.resultIndex=l.length;let p=La(c.result,a.metrics);l.push(n[c.index]?.type==="EXPLAIN"?wi(p,r):p)}return u});return{type:"batch",batch:!0,statementCount:a.statementCount,statements:d,results:l,warnings:[]}}catch(i){throw Ii(Ia(i,n),r)}}function iR(e){if(e===null||typeof e!="object"||e.type!=="SELECT")throw new Error("Engine returned a non-SELECT result")}async function oR(e,t){let n=[];try{let r=vu(t,"run"),i=Ti(e,r.client,r.logicalApps);n=i.logicalBindings;let a=eR(i.sql).type==="VALIDATE"?{...r.executeOptions,onLimitReached:"error"}:r.executeOptions,s=await Qn(i.client,l=>zl(i.sql,Jn(l),{...a,captureColumnMeta:!0}));return iR(s),La(s)}catch(r){throw Ii(dn(r),n)}}async function aR(e,t){let n=[],r=[];try{let i=vu(t,"explain"),o=Ti(e,i.client,i.logicalApps);r=o.logicalBindings;let a=nR(o.sql);if(n=a.statements,a.legacySql!==void 0){let c=await Qn(o.client,f=>zl(a.legacySql,Jn(f),i.executeOptions));iR(c);let u=wi(c.rows.map(f=>String(f.plan??"")),r),p=wu(c)??{statements:[{index:0,fetch:"none",sources:[]}]};return{type:"explain",lines:u,text:u.join(`
|
|
16
16
|
`),plan:p,metrics:Oa(c.metrics)}}let s=await Qn(o.client,c=>wE(o.sql,Jn(c),void 0,"batch-explain",i.executeOptions.maxRecords,i.executeOptions.cursorMaxActive)),l=wi(s.statements.flatMap(c=>[...s.statementCount>1?[`[${c.index+1}] ${c.type}`]:[],...c.plan]),r),d=wu(s)??{statements:s.statements.map(c=>({index:c.index,fetch:"none",sources:[]}))};return{type:"explain",lines:l,text:l.join(`
|
|
17
|
-
`),plan:d,metrics:Oa()}}catch(i){throw Ii(Ia(i,n),r)}}var YT="3.56.
|
|
17
|
+
`),plan:d,metrics:Oa()}}catch(i){throw Ii(Ia(i,n),r)}}var YT="3.56.3";0&&(module.exports={KsqlEngineError,createReadonlyKintoneClient,explainQuery,runBatch,runQuery,version});
|
package/dist-engine/index.mjs
CHANGED
|
@@ -14,4 +14,4 @@ WHERE \u3092 AND \u306E\u5B89\u5168\u306A KLIKE \u6761\u4EF6\u3078\u66F8\u304D\u
|
|
|
14
14
|
`));return typeof n.code=="string"&&n.code!==""&&(i.name=n.code),typeof n.code=="string"&&Object.assign(i,{code:n.code}),typeof n.status=="number"&&Object.assign(i,{status:n.status}),Object.assign(i,{cause:e}),i}async function fT(e){try{let t=await e.json();if(t!==null&&typeof t=="object"){let r=t;return hi({code:r.code,message:r.message,errors:r.errors,status:e.status})}let n=new Error(`kintone API error: HTTP ${e.status}`);return Object.assign(n,{status:e.status,cause:t}),hi(n)}catch(t){let n=new Error(`kintone API error: HTTP ${e.status} \u306E\u5FDC\u7B54\u3092 JSON \u3068\u3057\u3066\u89E3\u6790\u3067\u304D\u307E\u305B\u3093`);return Object.assign(n,{status:e.status,cause:t}),hi(n)}}function ET(e){let t=e;return t?.code==="GAIA_CN01"&&(t.status===404||t.status===void 0)}async function fn(e,t,n){try{return await kintone.api(Nu(e),t,n)}catch(r){throw hi(r)}}function RT(e){if(!Number.isSafeInteger(e)||e<1||e>5)throw new Error("ArgumentError: cursorMaxActive must be an integer from 1 to 5.")}function gT(e={}){let t=e.cursorMaxActive??pT;RT(t);let n=null,r=null,i=new Set;return{async getRecords(a){try{let s=dT(a),l=await fetch(s.url,s.init);if(!l.ok)throw await fT(l);let d=await l.json();return vE(l.headers.get("X-Cybozu-Warning"))?{...d,searchAborted:!0}:d}catch(s){throw hi(s)}},async openCursor(a){let s=Nu(Na),l=new URL(s,globalThis.location?.href).host.toLowerCase();if(r!==null&&r!==l)throw new Error(`CursorRouteError: factory route changed from ${r} to ${l}.`);if(r=l,n??(n=new ba(l,{maxActive:t})),n.snapshot().active>=t){let R=new Error(`CursorCapacityError: host=${l} \u306E active cursor \u4E0A\u9650 ${t} \u306B\u9054\u3057\u3066\u3044\u307E\u3059\u3002`);throw R.name="CursorCapacityError",R}let d=await n.acquire(),c;try{c=await n.runCreate(()=>fn(Na,"POST",{app:a.app,query:a.query,size:a.size,fields:a.fields&&a.fields.length>0?a.fields:void 0}))}catch(R){throw typeof R?.code=="string"?(d.release(),R):(d.quarantine(),new vo(R))}let u=c.id,p=OE(Number(c.totalCount),{get:()=>fn(Na,"GET",{id:u}),delete:()=>fn(Na,"DELETE",{id:u}),isAlreadyReleasedError:ET,onReleased:()=>d.release(),onReleaseUnknown:()=>d.quarantine()}),f=null,E={totalCount:p.totalCount,async nextPage(){let R=await p.nextPage();return R.next||i.delete(E),R},close(){return f||(f=p.close().finally(()=>{i.delete(E)}),f)}};return i.add(E),E},async getApps(){let s=[],l=0;for(;;){let d=await fn("/k/v1/apps.json","GET",{limit:100,offset:l});for(let c of d.apps)s.push({appId:Number(c.appId),name:c.name,description:c.description});if(d.apps.length<100)break;l+=100}return s},async getFields(a){let s=await fn("/k/v1/app/form/fields.json","GET",{app:a});return LE(s.properties)},async getNumberPrecision(a){let s=await fn("/k/v1/app/settings.json","GET",{app:a});return Pp(s)},async getProcessStatuses(a){let s=await fn("/k/v1/app/status.json","GET",{app:a,lang:"user"});return{enable:s.enable,states:DE(s.states)}}}}var kE=new Set(["postRecords","putRecords","deleteRecords"]),Ai=class extends Error{constructor(t){let n=t instanceof Error?t.message:String(t);super(n),this.name="ClientOperationError",this.cause=t,Object.setPrototypeOf(this,new.target.prototype)}};async function xt(e){try{return await e()}catch(t){throw new Ai(t)}}function yT(e){return()=>{throw $e(`${String(e)} is blocked by the readonly client`)}}function Jn(e){let t=e.getRecords.bind(e),n=e.openCursor.bind(e),r=e.getApps.bind(e),i=e.getFields.bind(e),o=e.getNumberPrecision.bind(e),a=e.getProcessStatuses.bind(e),s=Object.assign(Object.create(null),{getRecords:async l=>{let d=await xt(()=>t(l));if(d.searchAborted===!0)throw CE();return d},openCursor:async l=>{let d=await xt(()=>n(l)),c=d.nextPage.bind(d),u=d.close.bind(d);return{totalCount:d.totalCount,nextPage:()=>xt(()=>c()),close:()=>xt(()=>u())}},getApps:()=>xt(()=>r()),getFields:l=>xt(()=>i(l)),getNumberPrecision:l=>xt(()=>o(l)),getProcessStatuses:l=>xt(()=>a(l))});return new Proxy(s,{get(l,d,c){return kE.has(d)?yT(d):Reflect.get(l,d,c)},has(l,d){return kE.has(d)?!1:Reflect.has(l,d)}})}function mT(e){let t=new Set,n=null;return{client:{getRecords:e.getRecords.bind(e),async openCursor(i){let o=await e.openCursor.call(e,i),a=null,s={totalCount:o.totalCount,nextPage:o.nextPage.bind(o),close(){return a||(a=Promise.resolve().then(()=>o.close()).finally(()=>{t.delete(s)}),a)}};return t.add(s),s},getApps:e.getApps.bind(e),getFields:e.getFields.bind(e),getNumberPrecision:e.getNumberPrecision.bind(e),getProcessStatuses:e.getProcessStatuses.bind(e)},close(){return n||(n=(async()=>{let o=(await Promise.allSettled([...t].map(a=>a.close()))).find(a=>a.status==="rejected");if(o)throw new Ai(o.reason)})(),n)}}}async function Qn(e,t){let n=mT(e),r=!1;try{return await t(n.client)}catch(i){throw r=!0,i}finally{try{await n.close()}catch(i){if(!r)throw i}}}var hT="A-Za-z",AT="\\u3040-\\u30FF\\u3400-\\u9FFF\\uF900-\\uFAFF\\uFF01-\\uFF60",Ou=`${hT}${AT}`,FE=`${Ou}0-9_`,ST=new RegExp(`^[${Ou}]$`,"u"),TT=new RegExp(`^[${FE}]$`,"u"),IT=new RegExp(`^[${Ou}][${FE}]{0,63}$`,"u");function wT(e){return ST.test(e)}function bT(e){return TT.test(e)}function Lu(e){let t=e.normalize("NFC").toUpperCase();if(!IT.test(t))throw new Error(`ArgumentError: logical app name "${e}" is invalid; expected 1-64 UTF-16 units starting with an ASCII letter or supported Japanese character.`);return t}function Cu(e){if(!e)return!1;let t=e.codePointAt(0);return t>=65&&t<=90||t>=97&&t<=122||t>=48&&t<=57||t===95||t===36||t>=12352&&t<=12543||t>=13312&&t<=40959||t>=63744&&t<=64255||t>=65281&&t<=65376}function PT(e){if(!e)return!1;let t=e.codePointAt(0);return t>=65&&t<=90||t>=97&&t<=122||t>=48&&t<=57||e==="_"||e==="-"||e==="."||e==="$"}function NT(e,t){let n=t>0?e[t-1]:"";if(Cu(n))return null;let r,i,o,a,s,l;if(e.slice(t,t+5).toUpperCase()==="LAPP_"){if(r="logical",l=t+5,a=l,!wT(e[l]??""))return null;for(l++;l<e.length&&bT(e[l]);)l++;s=l;try{o=Lu(e.slice(a,s))}catch{return null}}else if(e.slice(t,t+3).toUpperCase()==="APP"){for(r="physical",l=t+3,a=l;l<e.length&&/[0-9]/.test(e[l]);)l++;if(s=l,s===a)return null;i=Number(e.slice(a,s))}else return null;if(e[l]==="$"){l++;let f=l;for(;l<e.length&&Cu(e[l]);)l++;if(l===f)return null}let d=l,c=null;if(e[l]==="@"){l++;let f=l;for(;l<e.length&&PT(e[l]);)l++;if(l===f)return null;c=e.slice(f,l)}let u=l<e.length?e[l]:"";if(Cu(u))return null;let p={profile:c,start:t,referenceValueStart:a,referenceValueEnd:s,appEnd:d,fullEnd:l};return r==="physical"?{...p,source:r,appId:i}:{...p,source:r,logicalName:o}}function _u(e){let t=[],n=0;for(;n<e.length;){let r=e[n];if(r==="'"){for(n++;n<e.length;){if(e[n]==="'"){if(n++,n<e.length&&e[n]==="'"){n++;continue}break}n++}continue}if(r==="`"){for(n++;n<e.length&&e[n]!=="`";)n++;n<e.length&&n++;continue}if(r==="-"&&e[n+1]==="-"){for(n+=2;n<e.length&&e[n]!==`
|
|
15
15
|
`;)n++;continue}if(r==="/"&&e[n+1]==="*"){for(n+=2;n<e.length;){if(e[n]==="*"&&e[n+1]==="/"){n+=2;break}n++}continue}let i=NT(e,n);if(!i){n++;continue}t.push(i),n=i.fullEnd}return t}function ME(e){let t=9e8;for(;e.has(t);)t++;return e.add(t),t}function xE(e,t="dev",n){let r=_u(e),i=r.some(g=>g.profile!==null),o=new Map,a=g=>g??t;for(let g of r){if(g.source!=="physical")continue;let y=a(g.profile),m=o.get(g.appId);m||(m=new Set,o.set(g.appId,m)),m.add(y.toLowerCase())}let s=new Set(r.filter(g=>g.source==="physical").map(g=>g.appId)),l=new Map;for(let g of r){if(g.source!=="logical")continue;let y=a(g.profile).toLowerCase(),m=`logical:${g.logicalName}@${y}`;if(l.has(m))continue;if(!n)throw new Error(`ArgumentError: logical app LAPP_${g.logicalName}@${y} requires logicalApps configuration.`);let h=n.resolveLogicalApp(g.logicalName,y);l.set(m,h),s.add(h)}let d=new Map,c=new Map;for(let[g,y]of o.entries()){let m=[...y].sort();if(!(m.length<=1))for(let h of m){let S=ME(s);d.set(`physical:${g}@${h}`,S),c.set(S,{source:"physical",mappedAppId:S,appId:g,profile:h})}}let u=[],p=[],f=0,E=0,R=(g,y,m,h)=>{if(!g&&y===m)return;let S=f;u.push(g),f+=g.length,p.push({normalizedStart:S,normalizedEnd:f,sourceStart:y,sourceEnd:m,...h===void 0?{}:{bindingMappedAppId:h}})};for(let g of r){let y=a(g.profile).toLowerCase(),m;if(g.source==="physical")m={source:"physical",mappedAppId:d.get(`physical:${g.appId}@${y}`)??g.appId,appId:g.appId,profile:y};else{let I=`logical:${g.logicalName}@${y}`,w=d.get(I);w===void 0&&(w=ME(s),d.set(I,w)),m={source:"logical",logicalName:g.logicalName,mappedAppId:w,appId:l.get(I),profile:y}}c.set(m.mappedAppId,m),R(e.slice(E,g.start),E,g.start);let h=e.slice(g.referenceValueEnd,g.appEnd),S=g.source==="physical"?`${e.slice(g.start,g.referenceValueStart)}${m.mappedAppId}${h}`:`APP${m.mappedAppId}${h}`;R(S,g.start,g.fullEnd,m.mappedAppId),E=g.fullEnd}return R(e.slice(E),E,e.length),{normalizedSql:u.join(""),hasProfileSyntax:i,appBindingByMappedApp:c,rewriteSegments:p}}var KE=new Set(["client","logicalApps","maxRecords","fetchParallel","cursorMaxActive"]),BE=new Set([...KE,"onLimitReached"]),CT=new Set([...BE,"variables","tempTableMaxRows"]);function GE(e){if(e===null||typeof e!="object"||Array.isArray(e))throw new TypeError("options must be an object")}function Si(e,t){if(!Number.isSafeInteger(e)||e<=0)throw new RangeError(`${t} must be a positive safe integer`)}function $E(e){if(e===null||typeof e!="object")throw new TypeError("client is required");let t=e;for(let n of["getRecords","openCursor","getApps","getFields","getNumberPrecision","getProcessStatuses"])if(typeof t[n]!="function")throw new TypeError(`client.${n} must be a function`)}function OT(e){if(e===null||typeof e!="object"||Array.isArray(e))throw new TypeError("variables must be an object");for(let[t,n]of Object.entries(e))if(typeof n!="string")throw new TypeError(`variables.${t} must be a string`)}function VE(e){if(e===void 0)return;if(e===null||typeof e!="object"||Array.isArray(e))throw new TypeError("logicalApps must be an object");let t={};for(let[n,r]of Object.entries(e)){let i;try{i=Lu(n)}catch{throw new TypeError(`logicalApps key "${n}" is invalid`)}if(Object.prototype.hasOwnProperty.call(t,i))throw new TypeError(`logicalApps key "${n}" duplicates "${i}" after canonical normalization`);Si(r,`logicalApps.${n}`),t[i]=r}return t}function WE(e,t,n){for(let r of Reflect.ownKeys(e))if(typeof r!="string"||!t.has(r))throw new TypeError(`Unknown ${n} option: ${String(r)}`);if(e.maxRecords!==void 0&&Si(e.maxRecords,"maxRecords"),e.fetchParallel!==void 0&&Si(e.fetchParallel,"fetchParallel"),e.cursorMaxActive!==void 0&&(Si(e.cursorMaxActive,"cursorMaxActive"),e.cursorMaxActive>5))throw new RangeError("cursorMaxActive must be between 1 and 5");if(e.onLimitReached!==void 0&&e.onLimitReached!=="error"&&e.onLimitReached!=="truncate")throw new TypeError('onLimitReached must be "error" or "truncate"');return{...e.maxRecords!==void 0?{maxRecords:e.maxRecords}:{},...e.fetchParallel!==void 0?{fetchParallel:e.fetchParallel}:{},...e.cursorMaxActive!==void 0?{cursorMaxActive:e.cursorMaxActive}:{},...e.onLimitReached!==void 0?{onLimitReached:e.onLimitReached}:{}}}function Du(e,t){GE(e);let n=t==="run"?BE:KE;$E(e.client);let r=WE(e,n,t==="run"?"runQuery":"explainQuery"),i=VE(e.logicalApps);return{client:e.client,...i===void 0?{}:{logicalApps:i},executeOptions:r}}function HE(e){GE(e),$E(e.client),e.variables!==void 0&&OT(e.variables),e.tempTableMaxRows!==void 0&&Si(e.tempTableMaxRows,"tempTableMaxRows");let t=WE(e,CT,"runBatch"),n=VE(e.logicalApps);return{client:e.client,...n===void 0?{}:{logicalApps:n},executeOptions:{...t,...e.variables!==void 0?{variables:e.variables}:{},...e.tempTableMaxRows!==void 0?{tempTableMaxRows:e.tempTableMaxRows}:{}}}}function Ca(e,t,n={}){let r=n.logicalAppDisplay??"profile";if(typeof e=="string"){let i=e.match(/^(\s*target:\s*)APP(\d+) \((\d+)\)\s*$/);if(i&&i[2]===i[3]){let s=t.get(Number(i[2]));if(s){let l=s.source==="logical"?r==="physical"?`LAPP_${s.logicalName} -> APP${s.appId}`:`LAPP_${s.logicalName} -> APP${s.appId}@${s.profile}`:r==="physical"?`APP${s.appId}`:`APP${s.appId}@${s.profile}`;return`${i[1]}${l}`}}if(t.size===0)return e;let o=[...t.keys()].sort((s,l)=>String(l).length-String(s).length),a=new RegExp(`APP(${o.join("|")})(?!\\d)(\\s+AS\\s+[^\\s()]+)?(?:\\s+\\(\\1\\))?`,"g");return e.replace(a,(s,l,d)=>{let c=t.get(Number(l));return`${c.source==="logical"?r==="physical"?`LAPP_${c.logicalName} -> APP${c.appId}`:`LAPP_${c.logicalName}@${c.profile}`:r==="physical"?`APP${c.appId}`:`APP${c.appId}@${c.profile}`}${d??""}`})}return Array.isArray(e)?e.map(i=>Ca(i,t,n)):e!==null&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([i,o])=>[i,Ca(o,t,n)])):e}function LT(e,t,n){return e.slice(t,n)}function Ti(e,t,n){let r=_u(e),i=r.find(d=>d.profile!==null);if(i!==void 0)throw new Error(`ArgumentError: browser engine library does not support @profile suffixes (${LT(e,i.start,i.fullEnd)}).`);if(!r.some(d=>d.source==="logical"))return{sql:e,client:t,logicalBindings:[]};let o=xE(e,"browser",{resolveLogicalApp(d){let c=n?.[d];if(c===void 0)throw new Error(`ArgumentError: logical app LAPP_${d} is not defined.`);return c}}),a=[...o.appBindingByMappedApp.values()].filter(d=>d.source==="logical"),s=d=>o.appBindingByMappedApp.get(d)?.appId??d,l={getRecords:d=>t.getRecords({...d,app:s(d.app)}),openCursor:d=>t.openCursor({...d,app:s(d.app)}),getApps:()=>t.getApps(),getFields:d=>t.getFields(s(d)),getNumberPrecision:d=>t.getNumberPrecision(s(d)),getProcessStatuses:d=>t.getProcessStatuses(s(d))};return{sql:o.normalizedSql,client:l,logicalBindings:a}}function Ii(e,t){if(t.length===0)return e;let n=t.map(r=>`LAPP_${r.logicalName} -> APP${r.appId}`).filter((r,i,o)=>o.indexOf(r)===i);return e.message=`${e.message} [logical apps: ${n.join(", ")}]`,e}function wi(e,t){if(t.length===0)return e;let n=new Map(t.map(r=>[r.mappedAppId,r]));return Ca(e,n,{logicalAppDisplay:"physical"})}function Oa(e){return{recordGetCalls:e?.getCalls??0,fetchedRows:e?.fetchedRows??0,elapsedMs:e?.elapsedMs??0,cursorRecordsScanned:e?.cursorRecordsScanned??0,limitReached:e?.limitReached??!1,limitReachedApps:e?[...e.limitReachedApps].sort((t,n)=>t-n):[]}}function _T(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,String(n)]))}function DT(e,t){let n=t?.get(e),r=n?.fieldType??n?.semantics?.fieldType,i=n?.semantics?.compareMode,o=n?.sortKind??(i==="number"||i==="string"?i:void 0),a=n?.publicSourceApp;return{name:e,displayName:n?.displayName??e,valueType:"string",...r!==void 0?{fieldType:r}:{},...o!==void 0?{sortKind:o}:{},...a!==void 0?{sourceApp:a}:{}}}function La(e,t=e.metrics){let n=Tf(e);return{type:"query",rows:e.rows.map(_T),columns:e.columns.map(r=>DT(r,n)),rowCount:e.rowCount,warnings:[...e.warnings??[]],...e.validateStats?{validateStats:e.validateStats}:{},metrics:Oa(t)}}function YE(e,t={}){let n=new Lt(e).tokenize(),r=new _t(n,t).parse();return We(r),r}function jE(e,t={}){let n=new Lt(e).tokenize(),r=new _t(n,t).parseStatements();return r.forEach(We),r}function vu(e){let t=e.type==="EXPLAIN"?e.query:e;if(t.type!=="UPDATE"&&t.type!=="INSERT"&&t.type!=="UPSERT")return!1;let n=t;return["applyBlocks","onInsertApplyBlocks","onUpdateApplyBlocks"].some(r=>Array.isArray(n[r])&&n[r].length>0)}function zE(e){if(e instanceof se)return Xn(e.message,e);let t=dn(e);return t.code==="PARSE_ERROR"?t:Xn("SQL statement could not be parsed",e)}function vT(e){if(e.trim()==="")throw Xn("SQL statement is empty");try{return YE(e,{import:!0})}catch(t){let n=zE(t);throw n.message.includes("\u8907\u6587\u306F\u30D0\u30C3\u30C1\u5B9F\u884C API \u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044")?Xn("This API accepts one statement; use runBatch for multiple statements",t):n}}function qE(e){if(Li(e)==="UNKNOWN")throw $e("Unclassifiable statement is not allowed");return e}function XE(e){if(e.trim()==="")throw Xn("SQL statement is empty");try{return jE(e,{import:!0})}catch(t){throw zE(t)}}function UT(e){let t=qE(e),n=t.type;if(n==="IMPORT")throw $e("IMPORT is disabled by default in engine library queries");if(!yn(t))throw $e(`${n} statements are not read-only`);if(vu(t))throw $e("APPLY statements are not allowed in engine library queries");if(!Vu(t))throw $e(`${n} does not return rows; use runBatch for batch-scoped or non-row-returning read-only statements`)}function JE(e){let t=qE(e),n=t.type==="EXPLAIN"?t.query:t;if(n.type==="IMPORT")throw $e("IMPORT is disabled by default in engine library batches");if(!yn(n))throw $e(`${n.type} statements are not read-only`);if(vu(n))throw $e("APPLY statements are not allowed in engine library batches");if(It(n.type))throw $e("DML VALIDATE ONLY statements are not supported by runBatch")}function QE(e){let t=vT(e);return UT(t),t}function ZE(e){let t=XE(e);return t.forEach(JE),t}function eR(e){let t=e.trim(),n=XE(t);n.forEach(JE);let r=n[0],i=r.type==="EXPLAIN"?r.query:r;return n.length===1&&(i.type==="SELECT"||i.type==="WITH"||i.type==="UNION")?{statements:n,legacySql:r.type==="EXPLAIN"?t:`EXPLAIN ${t}`}:{statements:n}}function kT(e){let t=e.error,n=t?.cause!==void 0?dn(t.cause):new we("EXECUTION_ERROR",t?.message??`Statement ${e.index} failed`);return Pu(n,e.index,e.type)}async function MT(e,t){let n=[],r=[];try{let i=HE(t),o=Ti(e,i.client,i.logicalApps);r=o.logicalBindings,n=ZE(o.sql);let a=await Qn(o.client,c=>Lf(o.sql,Jn(c),{...i.executeOptions,captureColumnMeta:!0})),s=a.statements.find(c=>c.status==="error");if(s!==void 0)throw kT(s);let l=[],d=a.statements.map(c=>{let u={index:c.index,type:c.type,status:c.status};if(c.tempTable!==void 0&&(u.tempTable=c.tempTable),c.rowCount!==void 0&&(u.rowCount=c.rowCount),c.error!==void 0&&(u.error={code:c.error.code,message:c.error.message}),c.skippedReason!==void 0&&(u.skippedReason=c.skippedReason),c.status==="success"&&c.result?.type==="SELECT"){u.resultIndex=l.length;let p=La(c.result,a.metrics);l.push(n[c.index]?.type==="EXPLAIN"?wi(p,r):p)}return u});return{type:"batch",batch:!0,statementCount:a.statementCount,statements:d,results:l,warnings:[]}}catch(i){throw Ii(Ia(i,n),r)}}function tR(e){if(e===null||typeof e!="object"||e.type!=="SELECT")throw new Error("Engine returned a non-SELECT result")}async function FT(e,t){let n=[];try{let r=Du(t,"run"),i=Ti(e,r.client,r.logicalApps);n=i.logicalBindings;let a=QE(i.sql).type==="VALIDATE"?{...r.executeOptions,onLimitReached:"error"}:r.executeOptions,s=await Qn(i.client,l=>jl(i.sql,Jn(l),{...a,captureColumnMeta:!0}));return tR(s),La(s)}catch(r){throw Ii(dn(r),n)}}async function xT(e,t){let n=[],r=[];try{let i=Du(t,"explain"),o=Ti(e,i.client,i.logicalApps);r=o.logicalBindings;let a=eR(o.sql);if(n=a.statements,a.legacySql!==void 0){let c=await Qn(o.client,f=>jl(a.legacySql,Jn(f),i.executeOptions));tR(c);let u=wi(c.rows.map(f=>String(f.plan??"")),r),p=Iu(c)??{statements:[{index:0,fetch:"none",sources:[]}]};return{type:"explain",lines:u,text:u.join(`
|
|
16
16
|
`),plan:p,metrics:Oa(c.metrics)}}let s=await Qn(o.client,c=>IE(o.sql,Jn(c),void 0,"batch-explain",i.executeOptions.maxRecords,i.executeOptions.cursorMaxActive)),l=wi(s.statements.flatMap(c=>[...s.statementCount>1?[`[${c.index+1}] ${c.type}`]:[],...c.plan]),r),d=Iu(s)??{statements:s.statements.map(c=>({index:c.index,fetch:"none",sources:[]}))};return{type:"explain",lines:l,text:l.join(`
|
|
17
|
-
`),plan:d,metrics:Oa()}}catch(i){throw Ii(Ia(i,n),r)}}var XO="3.56.
|
|
17
|
+
`),plan:d,metrics:Oa()}}catch(i){throw Ii(Ia(i,n),r)}}var XO="3.56.3";export{we as KsqlEngineError,gT as createReadonlyKintoneClient,xT as explainQuery,MT as runBatch,FT as runQuery,XO as version};
|
|
@@ -14,4 +14,4 @@ WHERE \u3092 AND \u306E\u5B89\u5168\u306A KLIKE \u6761\u4EF6\u3078\u66F8\u304D\u
|
|
|
14
14
|
`));return typeof n.code=="string"&&n.code!==""&&(i.name=n.code),typeof n.code=="string"&&Object.assign(i,{code:n.code}),typeof n.status=="number"&&Object.assign(i,{status:n.status}),Object.assign(i,{cause:e}),i}async function AT(e){try{let t=await e.json();if(t!==null&&typeof t=="object"){let r=t;return hi({code:r.code,message:r.message,errors:r.errors,status:e.status})}let n=new Error(`kintone API error: HTTP ${e.status}`);return Object.assign(n,{status:e.status,cause:t}),hi(n)}catch(t){let n=new Error(`kintone API error: HTTP ${e.status} \u306E\u5FDC\u7B54\u3092 JSON \u3068\u3057\u3066\u89E3\u6790\u3067\u304D\u307E\u305B\u3093`);return Object.assign(n,{status:e.status,cause:t}),hi(n)}}function ST(e){let t=e;return t?.code==="GAIA_CN01"&&(t.status===404||t.status===void 0)}async function fn(e,t,n){try{return await kintone.api(Nu(e),t,n)}catch(r){throw hi(r)}}function TT(e){if(!Number.isSafeInteger(e)||e<1||e>5)throw new Error("ArgumentError: cursorMaxActive must be an integer from 1 to 5.")}function Cu(e={}){let t=e.cursorMaxActive??mT;TT(t);let n=null,r=null,i=new Set;return{async getRecords(a){try{let s=hT(a),l=await fetch(s.url,s.init);if(!l.ok)throw await AT(l);let d=await l.json();return xE(l.headers.get("X-Cybozu-Warning"))?{...d,searchAborted:!0}:d}catch(s){throw hi(s)}},async openCursor(a){let s=Nu(Na),l=new URL(s,globalThis.location?.href).host.toLowerCase();if(r!==null&&r!==l)throw new Error(`CursorRouteError: factory route changed from ${r} to ${l}.`);if(r=l,n??(n=new ba(l,{maxActive:t})),n.snapshot().active>=t){let R=new Error(`CursorCapacityError: host=${l} \u306E active cursor \u4E0A\u9650 ${t} \u306B\u9054\u3057\u3066\u3044\u307E\u3059\u3002`);throw R.name="CursorCapacityError",R}let d=await n.acquire(),c;try{c=await n.runCreate(()=>fn(Na,"POST",{app:a.app,query:a.query,size:a.size,fields:a.fields&&a.fields.length>0?a.fields:void 0}))}catch(R){throw typeof R?.code=="string"?(d.release(),R):(d.quarantine(),new vo(R))}let u=c.id,p=UE(Number(c.totalCount),{get:()=>fn(Na,"GET",{id:u}),delete:()=>fn(Na,"DELETE",{id:u}),isAlreadyReleasedError:ST,onReleased:()=>d.release(),onReleaseUnknown:()=>d.quarantine()}),f=null,E={totalCount:p.totalCount,async nextPage(){let R=await p.nextPage();return R.next||i.delete(E),R},close(){return f||(f=p.close().finally(()=>{i.delete(E)}),f)}};return i.add(E),E},async getApps(){let s=[],l=0;for(;;){let d=await fn("/k/v1/apps.json","GET",{limit:100,offset:l});for(let c of d.apps)s.push({appId:Number(c.appId),name:c.name,description:c.description});if(d.apps.length<100)break;l+=100}return s},async getFields(a){let s=await fn("/k/v1/app/form/fields.json","GET",{app:a});return kE(s.properties)},async getNumberPrecision(a){let s=await fn("/k/v1/app/settings.json","GET",{app:a});return _p(s)},async getProcessStatuses(a){let s=await fn("/k/v1/app/status.json","GET",{app:a,lang:"user"});return{enable:s.enable,states:FE(s.states)}}}}var BE=new Set(["postRecords","putRecords","deleteRecords"]),Ai=class extends Error{constructor(t){let n=t instanceof Error?t.message:String(t);super(n),this.name="ClientOperationError",this.cause=t,Object.setPrototypeOf(this,new.target.prototype)}};async function xt(e){try{return await e()}catch(t){throw new Ai(t)}}function IT(e){return()=>{throw $e(`${String(e)} is blocked by the readonly client`)}}function Jn(e){let t=e.getRecords.bind(e),n=e.openCursor.bind(e),r=e.getApps.bind(e),i=e.getFields.bind(e),o=e.getNumberPrecision.bind(e),a=e.getProcessStatuses.bind(e),s=Object.assign(Object.create(null),{getRecords:async l=>{let d=await xt(()=>t(l));if(d.searchAborted===!0)throw vE();return d},openCursor:async l=>{let d=await xt(()=>n(l)),c=d.nextPage.bind(d),u=d.close.bind(d);return{totalCount:d.totalCount,nextPage:()=>xt(()=>c()),close:()=>xt(()=>u())}},getApps:()=>xt(()=>r()),getFields:l=>xt(()=>i(l)),getNumberPrecision:l=>xt(()=>o(l)),getProcessStatuses:l=>xt(()=>a(l))});return new Proxy(s,{get(l,d,c){return BE.has(d)?IT(d):Reflect.get(l,d,c)},has(l,d){return BE.has(d)?!1:Reflect.has(l,d)}})}function wT(e){let t=new Set,n=null;return{client:{getRecords:e.getRecords.bind(e),async openCursor(i){let o=await e.openCursor.call(e,i),a=null,s={totalCount:o.totalCount,nextPage:o.nextPage.bind(o),close(){return a||(a=Promise.resolve().then(()=>o.close()).finally(()=>{t.delete(s)}),a)}};return t.add(s),s},getApps:e.getApps.bind(e),getFields:e.getFields.bind(e),getNumberPrecision:e.getNumberPrecision.bind(e),getProcessStatuses:e.getProcessStatuses.bind(e)},close(){return n||(n=(async()=>{let o=(await Promise.allSettled([...t].map(a=>a.close()))).find(a=>a.status==="rejected");if(o)throw new Ai(o.reason)})(),n)}}}async function Qn(e,t){let n=wT(e),r=!1;try{return await t(n.client)}catch(i){throw r=!0,i}finally{try{await n.close()}catch(i){if(!r)throw i}}}var bT="A-Za-z",PT="\\u3040-\\u30FF\\u3400-\\u9FFF\\uF900-\\uFAFF\\uFF01-\\uFF60",Lu=`${bT}${PT}`,$E=`${Lu}0-9_`,NT=new RegExp(`^[${Lu}]$`,"u"),CT=new RegExp(`^[${$E}]$`,"u"),OT=new RegExp(`^[${Lu}][${$E}]{0,63}$`,"u");function LT(e){return NT.test(e)}function _T(e){return CT.test(e)}function _u(e){let t=e.normalize("NFC").toUpperCase();if(!OT.test(t))throw new Error(`ArgumentError: logical app name "${e}" is invalid; expected 1-64 UTF-16 units starting with an ASCII letter or supported Japanese character.`);return t}function Ou(e){if(!e)return!1;let t=e.codePointAt(0);return t>=65&&t<=90||t>=97&&t<=122||t>=48&&t<=57||t===95||t===36||t>=12352&&t<=12543||t>=13312&&t<=40959||t>=63744&&t<=64255||t>=65281&&t<=65376}function DT(e){if(!e)return!1;let t=e.codePointAt(0);return t>=65&&t<=90||t>=97&&t<=122||t>=48&&t<=57||e==="_"||e==="-"||e==="."||e==="$"}function vT(e,t){let n=t>0?e[t-1]:"";if(Ou(n))return null;let r,i,o,a,s,l;if(e.slice(t,t+5).toUpperCase()==="LAPP_"){if(r="logical",l=t+5,a=l,!LT(e[l]??""))return null;for(l++;l<e.length&&_T(e[l]);)l++;s=l;try{o=_u(e.slice(a,s))}catch{return null}}else if(e.slice(t,t+3).toUpperCase()==="APP"){for(r="physical",l=t+3,a=l;l<e.length&&/[0-9]/.test(e[l]);)l++;if(s=l,s===a)return null;i=Number(e.slice(a,s))}else return null;if(e[l]==="$"){l++;let f=l;for(;l<e.length&&Ou(e[l]);)l++;if(l===f)return null}let d=l,c=null;if(e[l]==="@"){l++;let f=l;for(;l<e.length&&DT(e[l]);)l++;if(l===f)return null;c=e.slice(f,l)}let u=l<e.length?e[l]:"";if(Ou(u))return null;let p={profile:c,start:t,referenceValueStart:a,referenceValueEnd:s,appEnd:d,fullEnd:l};return r==="physical"?{...p,source:r,appId:i}:{...p,source:r,logicalName:o}}function Du(e){let t=[],n=0;for(;n<e.length;){let r=e[n];if(r==="'"){for(n++;n<e.length;){if(e[n]==="'"){if(n++,n<e.length&&e[n]==="'"){n++;continue}break}n++}continue}if(r==="`"){for(n++;n<e.length&&e[n]!=="`";)n++;n<e.length&&n++;continue}if(r==="-"&&e[n+1]==="-"){for(n+=2;n<e.length&&e[n]!==`
|
|
15
15
|
`;)n++;continue}if(r==="/"&&e[n+1]==="*"){for(n+=2;n<e.length;){if(e[n]==="*"&&e[n+1]==="/"){n+=2;break}n++}continue}let i=vT(e,n);if(!i){n++;continue}t.push(i),n=i.fullEnd}return t}function GE(e){let t=9e8;for(;e.has(t);)t++;return e.add(t),t}function VE(e,t="dev",n){let r=Du(e),i=r.some(g=>g.profile!==null),o=new Map,a=g=>g??t;for(let g of r){if(g.source!=="physical")continue;let y=a(g.profile),m=o.get(g.appId);m||(m=new Set,o.set(g.appId,m)),m.add(y.toLowerCase())}let s=new Set(r.filter(g=>g.source==="physical").map(g=>g.appId)),l=new Map;for(let g of r){if(g.source!=="logical")continue;let y=a(g.profile).toLowerCase(),m=`logical:${g.logicalName}@${y}`;if(l.has(m))continue;if(!n)throw new Error(`ArgumentError: logical app LAPP_${g.logicalName}@${y} requires logicalApps configuration.`);let h=n.resolveLogicalApp(g.logicalName,y);l.set(m,h),s.add(h)}let d=new Map,c=new Map;for(let[g,y]of o.entries()){let m=[...y].sort();if(!(m.length<=1))for(let h of m){let S=GE(s);d.set(`physical:${g}@${h}`,S),c.set(S,{source:"physical",mappedAppId:S,appId:g,profile:h})}}let u=[],p=[],f=0,E=0,R=(g,y,m,h)=>{if(!g&&y===m)return;let S=f;u.push(g),f+=g.length,p.push({normalizedStart:S,normalizedEnd:f,sourceStart:y,sourceEnd:m,...h===void 0?{}:{bindingMappedAppId:h}})};for(let g of r){let y=a(g.profile).toLowerCase(),m;if(g.source==="physical")m={source:"physical",mappedAppId:d.get(`physical:${g.appId}@${y}`)??g.appId,appId:g.appId,profile:y};else{let I=`logical:${g.logicalName}@${y}`,w=d.get(I);w===void 0&&(w=GE(s),d.set(I,w)),m={source:"logical",logicalName:g.logicalName,mappedAppId:w,appId:l.get(I),profile:y}}c.set(m.mappedAppId,m),R(e.slice(E,g.start),E,g.start);let h=e.slice(g.referenceValueEnd,g.appEnd),S=g.source==="physical"?`${e.slice(g.start,g.referenceValueStart)}${m.mappedAppId}${h}`:`APP${m.mappedAppId}${h}`;R(S,g.start,g.fullEnd,m.mappedAppId),E=g.fullEnd}return R(e.slice(E),E,e.length),{normalizedSql:u.join(""),hasProfileSyntax:i,appBindingByMappedApp:c,rewriteSegments:p}}var WE=new Set(["client","logicalApps","maxRecords","fetchParallel","cursorMaxActive"]),HE=new Set([...WE,"onLimitReached"]),UT=new Set([...HE,"variables","tempTableMaxRows"]);function YE(e){if(e===null||typeof e!="object"||Array.isArray(e))throw new TypeError("options must be an object")}function Si(e,t){if(!Number.isSafeInteger(e)||e<=0)throw new RangeError(`${t} must be a positive safe integer`)}function jE(e){if(e===null||typeof e!="object")throw new TypeError("client is required");let t=e;for(let n of["getRecords","openCursor","getApps","getFields","getNumberPrecision","getProcessStatuses"])if(typeof t[n]!="function")throw new TypeError(`client.${n} must be a function`)}function kT(e){if(e===null||typeof e!="object"||Array.isArray(e))throw new TypeError("variables must be an object");for(let[t,n]of Object.entries(e))if(typeof n!="string")throw new TypeError(`variables.${t} must be a string`)}function zE(e){if(e===void 0)return;if(e===null||typeof e!="object"||Array.isArray(e))throw new TypeError("logicalApps must be an object");let t={};for(let[n,r]of Object.entries(e)){let i;try{i=_u(n)}catch{throw new TypeError(`logicalApps key "${n}" is invalid`)}if(Object.prototype.hasOwnProperty.call(t,i))throw new TypeError(`logicalApps key "${n}" duplicates "${i}" after canonical normalization`);Si(r,`logicalApps.${n}`),t[i]=r}return t}function qE(e,t,n){for(let r of Reflect.ownKeys(e))if(typeof r!="string"||!t.has(r))throw new TypeError(`Unknown ${n} option: ${String(r)}`);if(e.maxRecords!==void 0&&Si(e.maxRecords,"maxRecords"),e.fetchParallel!==void 0&&Si(e.fetchParallel,"fetchParallel"),e.cursorMaxActive!==void 0&&(Si(e.cursorMaxActive,"cursorMaxActive"),e.cursorMaxActive>5))throw new RangeError("cursorMaxActive must be between 1 and 5");if(e.onLimitReached!==void 0&&e.onLimitReached!=="error"&&e.onLimitReached!=="truncate")throw new TypeError('onLimitReached must be "error" or "truncate"');return{...e.maxRecords!==void 0?{maxRecords:e.maxRecords}:{},...e.fetchParallel!==void 0?{fetchParallel:e.fetchParallel}:{},...e.cursorMaxActive!==void 0?{cursorMaxActive:e.cursorMaxActive}:{},...e.onLimitReached!==void 0?{onLimitReached:e.onLimitReached}:{}}}function vu(e,t){YE(e);let n=t==="run"?HE:WE;jE(e.client);let r=qE(e,n,t==="run"?"runQuery":"explainQuery"),i=zE(e.logicalApps);return{client:e.client,...i===void 0?{}:{logicalApps:i},executeOptions:r}}function XE(e){YE(e),jE(e.client),e.variables!==void 0&&kT(e.variables),e.tempTableMaxRows!==void 0&&Si(e.tempTableMaxRows,"tempTableMaxRows");let t=qE(e,UT,"runBatch"),n=zE(e.logicalApps);return{client:e.client,...n===void 0?{}:{logicalApps:n},executeOptions:{...t,...e.variables!==void 0?{variables:e.variables}:{},...e.tempTableMaxRows!==void 0?{tempTableMaxRows:e.tempTableMaxRows}:{}}}}function Ca(e,t,n={}){let r=n.logicalAppDisplay??"profile";if(typeof e=="string"){let i=e.match(/^(\s*target:\s*)APP(\d+) \((\d+)\)\s*$/);if(i&&i[2]===i[3]){let s=t.get(Number(i[2]));if(s){let l=s.source==="logical"?r==="physical"?`LAPP_${s.logicalName} -> APP${s.appId}`:`LAPP_${s.logicalName} -> APP${s.appId}@${s.profile}`:r==="physical"?`APP${s.appId}`:`APP${s.appId}@${s.profile}`;return`${i[1]}${l}`}}if(t.size===0)return e;let o=[...t.keys()].sort((s,l)=>String(l).length-String(s).length),a=new RegExp(`APP(${o.join("|")})(?!\\d)(\\s+AS\\s+[^\\s()]+)?(?:\\s+\\(\\1\\))?`,"g");return e.replace(a,(s,l,d)=>{let c=t.get(Number(l));return`${c.source==="logical"?r==="physical"?`LAPP_${c.logicalName} -> APP${c.appId}`:`LAPP_${c.logicalName}@${c.profile}`:r==="physical"?`APP${c.appId}`:`APP${c.appId}@${c.profile}`}${d??""}`})}return Array.isArray(e)?e.map(i=>Ca(i,t,n)):e!==null&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([i,o])=>[i,Ca(o,t,n)])):e}function MT(e,t,n){return e.slice(t,n)}function Ti(e,t,n){let r=Du(e),i=r.find(d=>d.profile!==null);if(i!==void 0)throw new Error(`ArgumentError: browser engine library does not support @profile suffixes (${MT(e,i.start,i.fullEnd)}).`);if(!r.some(d=>d.source==="logical"))return{sql:e,client:t,logicalBindings:[]};let o=VE(e,"browser",{resolveLogicalApp(d){let c=n?.[d];if(c===void 0)throw new Error(`ArgumentError: logical app LAPP_${d} is not defined.`);return c}}),a=[...o.appBindingByMappedApp.values()].filter(d=>d.source==="logical"),s=d=>o.appBindingByMappedApp.get(d)?.appId??d,l={getRecords:d=>t.getRecords({...d,app:s(d.app)}),openCursor:d=>t.openCursor({...d,app:s(d.app)}),getApps:()=>t.getApps(),getFields:d=>t.getFields(s(d)),getNumberPrecision:d=>t.getNumberPrecision(s(d)),getProcessStatuses:d=>t.getProcessStatuses(s(d))};return{sql:o.normalizedSql,client:l,logicalBindings:a}}function Ii(e,t){if(t.length===0)return e;let n=t.map(r=>`LAPP_${r.logicalName} -> APP${r.appId}`).filter((r,i,o)=>o.indexOf(r)===i);return e.message=`${e.message} [logical apps: ${n.join(", ")}]`,e}function wi(e,t){if(t.length===0)return e;let n=new Map(t.map(r=>[r.mappedAppId,r]));return Ca(e,n,{logicalAppDisplay:"physical"})}function Oa(e){return{recordGetCalls:e?.getCalls??0,fetchedRows:e?.fetchedRows??0,elapsedMs:e?.elapsedMs??0,cursorRecordsScanned:e?.cursorRecordsScanned??0,limitReached:e?.limitReached??!1,limitReachedApps:e?[...e.limitReachedApps].sort((t,n)=>t-n):[]}}function FT(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,String(n)]))}function xT(e,t){let n=t?.get(e),r=n?.fieldType??n?.semantics?.fieldType,i=n?.semantics?.compareMode,o=n?.sortKind??(i==="number"||i==="string"?i:void 0),a=n?.publicSourceApp;return{name:e,displayName:n?.displayName??e,valueType:"string",...r!==void 0?{fieldType:r}:{},...o!==void 0?{sortKind:o}:{},...a!==void 0?{sourceApp:a}:{}}}function La(e,t=e.metrics){let n=Nf(e);return{type:"query",rows:e.rows.map(FT),columns:e.columns.map(r=>xT(r,n)),rowCount:e.rowCount,warnings:[...e.warnings??[]],...e.validateStats?{validateStats:e.validateStats}:{},metrics:Oa(t)}}function JE(e,t={}){let n=new Lt(e).tokenize(),r=new _t(n,t).parse();return We(r),r}function QE(e,t={}){let n=new Lt(e).tokenize(),r=new _t(n,t).parseStatements();return r.forEach(We),r}function Uu(e){let t=e.type==="EXPLAIN"?e.query:e;if(t.type!=="UPDATE"&&t.type!=="INSERT"&&t.type!=="UPSERT")return!1;let n=t;return["applyBlocks","onInsertApplyBlocks","onUpdateApplyBlocks"].some(r=>Array.isArray(n[r])&&n[r].length>0)}function ZE(e){if(e instanceof se)return Xn(e.message,e);let t=dn(e);return t.code==="PARSE_ERROR"?t:Xn("SQL statement could not be parsed",e)}function KT(e){if(e.trim()==="")throw Xn("SQL statement is empty");try{return JE(e,{import:!0})}catch(t){let n=ZE(t);throw n.message.includes("\u8907\u6587\u306F\u30D0\u30C3\u30C1\u5B9F\u884C API \u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044")?Xn("This API accepts one statement; use runBatch for multiple statements",t):n}}function eR(e){if(Li(e)==="UNKNOWN")throw $e("Unclassifiable statement is not allowed");return e}function tR(e){if(e.trim()==="")throw Xn("SQL statement is empty");try{return QE(e,{import:!0})}catch(t){throw ZE(t)}}function BT(e){let t=eR(e),n=t.type;if(n==="IMPORT")throw $e("IMPORT is disabled by default in engine library queries");if(!yn(t))throw $e(`${n} statements are not read-only`);if(Uu(t))throw $e("APPLY statements are not allowed in engine library queries");if(!zu(t))throw $e(`${n} does not return rows; use runBatch for batch-scoped or non-row-returning read-only statements`)}function nR(e){let t=eR(e),n=t.type==="EXPLAIN"?t.query:t;if(n.type==="IMPORT")throw $e("IMPORT is disabled by default in engine library batches");if(!yn(n))throw $e(`${n.type} statements are not read-only`);if(Uu(n))throw $e("APPLY statements are not allowed in engine library batches");if(It(n.type))throw $e("DML VALIDATE ONLY statements are not supported by runBatch")}function rR(e){let t=KT(e);return BT(t),t}function iR(e){let t=tR(e);return t.forEach(nR),t}function oR(e){let t=e.trim(),n=tR(t);n.forEach(nR);let r=n[0],i=r.type==="EXPLAIN"?r.query:r;return n.length===1&&(i.type==="SELECT"||i.type==="WITH"||i.type==="UNION")?{statements:n,legacySql:r.type==="EXPLAIN"?t:`EXPLAIN ${t}`}:{statements:n}}function GT(e){let t=e.error,n=t?.cause!==void 0?dn(t.cause):new Re("EXECUTION_ERROR",t?.message??`Statement ${e.index} failed`);return Pu(n,e.index,e.type)}async function ku(e,t){let n=[],r=[];try{let i=XE(t),o=Ti(e,i.client,i.logicalApps);r=o.logicalBindings,n=iR(o.sql);let a=await Qn(o.client,c=>kf(o.sql,Jn(c),{...i.executeOptions,captureColumnMeta:!0})),s=a.statements.find(c=>c.status==="error");if(s!==void 0)throw GT(s);let l=[],d=a.statements.map(c=>{let u={index:c.index,type:c.type,status:c.status};if(c.tempTable!==void 0&&(u.tempTable=c.tempTable),c.rowCount!==void 0&&(u.rowCount=c.rowCount),c.error!==void 0&&(u.error={code:c.error.code,message:c.error.message}),c.skippedReason!==void 0&&(u.skippedReason=c.skippedReason),c.status==="success"&&c.result?.type==="SELECT"){u.resultIndex=l.length;let p=La(c.result,a.metrics);l.push(n[c.index]?.type==="EXPLAIN"?wi(p,r):p)}return u});return{type:"batch",batch:!0,statementCount:a.statementCount,statements:d,results:l,warnings:[]}}catch(i){throw Ii(Ia(i,n),r)}}function aR(e){if(e===null||typeof e!="object"||e.type!=="SELECT")throw new Error("Engine returned a non-SELECT result")}async function Mu(e,t){let n=[];try{let r=vu(t,"run"),i=Ti(e,r.client,r.logicalApps);n=i.logicalBindings;let a=rR(i.sql).type==="VALIDATE"?{...r.executeOptions,onLimitReached:"error"}:r.executeOptions,s=await Qn(i.client,l=>jl(i.sql,Jn(l),{...a,captureColumnMeta:!0}));return aR(s),La(s)}catch(r){throw Ii(dn(r),n)}}async function Fu(e,t){let n=[],r=[];try{let i=vu(t,"explain"),o=Ti(e,i.client,i.logicalApps);r=o.logicalBindings;let a=oR(o.sql);if(n=a.statements,a.legacySql!==void 0){let c=await Qn(o.client,f=>jl(a.legacySql,Jn(f),i.executeOptions));aR(c);let u=wi(c.rows.map(f=>String(f.plan??"")),r),p=Iu(c)??{statements:[{index:0,fetch:"none",sources:[]}]};return{type:"explain",lines:u,text:u.join(`
|
|
16
16
|
`),plan:p,metrics:Oa(c.metrics)}}let s=await Qn(o.client,c=>CE(o.sql,Jn(c),void 0,"batch-explain",i.executeOptions.maxRecords,i.executeOptions.cursorMaxActive)),l=wi(s.statements.flatMap(c=>[...s.statementCount>1?[`[${c.index+1}] ${c.type}`]:[],...c.plan]),r),d=Iu(s)??{statements:s.statements.map(c=>({index:c.index,fetch:"none",sources:[]}))};return{type:"explain",lines:l,text:l.join(`
|
|
17
|
-
`),plan:d,metrics:Oa()}}catch(i){throw Ii(Ia(i,n),r)}}var xu="3.56.
|
|
17
|
+
`),plan:d,metrics:Oa()}}catch(i){throw Ii(Ia(i,n),r)}}var xu="3.56.3";var sR=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);function $T(){let e=Object.create(null);return Object.freeze({versions:e,get(t){return sR(e,t)?e[t]:void 0}})}function VT(e){if(e===null||typeof e!="object")return!1;let t=e;return t.versions!==null&&typeof t.versions=="object"&&!Array.isArray(t.versions)&&typeof t.get=="function"}function lR(e,t,n,r=console){let i;if(e.ksql===void 0){i=$T();try{e.ksql=i}catch(a){r.error(`[kSQL engine ${t}] window.ksql registry could not be initialized; loading was aborted.`,a);return}}else if(VT(e.ksql))i=e.ksql;else{r.error(`[kSQL engine ${t}] window.ksql already exists but is not a compatible { versions, get } registry; loading was aborted.`);return}if(sR(i.versions,t))return r.warn(`[kSQL engine ${t}] this version is already registered; the first entry was kept.`),i;let o=Object.freeze(n);try{i.versions[t]=o}catch(a){r.error(`[kSQL engine ${t}] the compatible window.ksql registry rejected registration; loading was aborted.`,a);return}return i}var WT={version:xu,createReadonlyKintoneClient:Cu,explainQuery:Fu,KsqlEngineError:Re,runBatch:ku,runQuery:Mu};lR(window,xu,WT);})();
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
|
-
"generatedAt": "2026-08-06T11:
|
|
2
|
+
"generatedAt": "2026-08-06T11:53:04.097Z",
|
|
3
3
|
"baseline": "B66 Phase1 initial measured values; no arbitrary size ceiling",
|
|
4
4
|
"bundles": {
|
|
5
5
|
"index.cjs": {
|
|
6
6
|
"inputCount": 103,
|
|
7
7
|
"minifiedBytes": 586135,
|
|
8
|
-
"gzipBytes":
|
|
8
|
+
"gzipBytes": 159852,
|
|
9
9
|
"forbidden": {
|
|
10
10
|
"mcp-instructions": [],
|
|
11
11
|
"src-mcp": [],
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"index.mjs": {
|
|
26
26
|
"inputCount": 103,
|
|
27
27
|
"minifiedBytes": 585590,
|
|
28
|
-
"gzipBytes":
|
|
28
|
+
"gzipBytes": 159576,
|
|
29
29
|
"forbidden": {
|
|
30
30
|
"mcp-instructions": [],
|
|
31
31
|
"src-mcp": [],
|
package/dist-mcp/ksql-mcp.js
CHANGED
|
@@ -29761,6 +29761,12 @@ init_define_KSQL_DOCS();
|
|
|
29761
29761
|
var import_node_fs = require("node:fs");
|
|
29762
29762
|
var import_node_path = require("node:path");
|
|
29763
29763
|
var import_docsResourceBuilder = __toESM(require_docsResourceBuilder());
|
|
29764
|
+
|
|
29765
|
+
// src/mcp/serverVersion.ts
|
|
29766
|
+
init_define_KSQL_DOCS();
|
|
29767
|
+
var SERVER_VERSION = true ? "3.56.3" : "0.0.0-dev";
|
|
29768
|
+
|
|
29769
|
+
// src/mcp/docsResources.ts
|
|
29764
29770
|
function loadFromRepoDocs() {
|
|
29765
29771
|
const docsDir = (0, import_node_path.resolve)(__dirname, "../../docs");
|
|
29766
29772
|
return (0, import_docsResourceBuilder.buildDocsResourceMap)(
|
|
@@ -29888,8 +29894,10 @@ var KSQL_DOCS_SECTION_KEYS = Object.freeze([
|
|
|
29888
29894
|
"recipes",
|
|
29889
29895
|
...RECIPE_KEYS.map((key) => `recipes/${key}`)
|
|
29890
29896
|
]);
|
|
29897
|
+
var KSQL_DOCS_VERSION_LINE = `kSQL MCP server version ${SERVER_VERSION} \u2014 the resident process that answered this call. A CLI \`--version\` reports a different process and can disagree.`;
|
|
29891
29898
|
function buildKsqlDocsIndex() {
|
|
29892
29899
|
return [
|
|
29900
|
+
KSQL_DOCS_VERSION_LINE,
|
|
29893
29901
|
KSQL_DOCS.languageReference.index.trimEnd(),
|
|
29894
29902
|
'Tool fallback example: ksql_docs {"section":"language-reference/05-string-number-functions"}',
|
|
29895
29903
|
KSQL_DOCS.recipes.index.trimEnd(),
|
|
@@ -58563,7 +58571,6 @@ Nested JSON/CSV subtable mutation is fail-closed on MCP: use VALIDATE ONLY/EXPLA
|
|
|
58563
58571
|
JSON child IDs are rejected and replacement renumbers all rows.
|
|
58564
58572
|
`);
|
|
58565
58573
|
}
|
|
58566
|
-
var SERVER_VERSION = true ? "3.56.2" : "0.0.0-dev";
|
|
58567
58574
|
var FUNCTION_CATALOG_PARAGRAPH = `Complete function catalog \u2014 Scalar: ${KSQL_FUNCTION_CATALOG.scalar.join(" ")}. Aggregate: ${KSQL_FUNCTION_CATALOG.aggregate.join(" ")}. Variance and standard-deviation aggregates use explicit POP/SAMP names; unqualified STDDEV and VARIANCE are unsupported. Window: ${KSQL_FUNCTION_CATALOG.window.join(" ")} (OVER and AS alias required). Contextual: ${KSQL_FUNCTION_CATALOG.contextual.join(" ")} (kintone predicates; WHERE server-only/fail-closed; INNER JOIN direct-APP exact pushdown supported; local LOGINUSER is empty on all surfaces). Aliases: ${KSQL_FUNCTION_CATALOG.aliases.join(" ")}. Syntax: ${KSQL_FUNCTION_CATALOG.syntax.join(" ")}. This list is complete; functions from other dialects such as IFNULL do not exist. Use ksql_docs for arguments and constraints.`;
|
|
58568
58575
|
var KSQL_MCP_INSTRUCTIONS = `kSQL MCP server version ${SERVER_VERSION}.
|
|
58569
58576
|
|
package/dist-mcpb/ksql-mcp.mcpb
CHANGED
|
Binary file
|