@forinda/kickjs-cli 6.7.0 → 6.9.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.
- package/dist/agent-docs-BEaN-yVq.mjs +11 -0
- package/dist/{agent-docs-tlau7tZv.mjs → agent-docs-NyyqHAxw.mjs} +3 -3
- package/dist/{agent-docs-tlau7tZv.mjs.map → agent-docs-NyyqHAxw.mjs.map} +1 -1
- package/dist/{build-CDi72mKz.mjs → build-CNy9rla8.mjs} +3 -3
- package/dist/{build-CDi72mKz.mjs.map → build-CNy9rla8.mjs.map} +1 -1
- package/dist/build-DBdGEMiZ.mjs +12 -0
- package/dist/builtins-DR3wYkm4.mjs +1498 -0
- package/dist/{builtins-BiTg6p4D.mjs → builtins-epL6Z9Me.mjs} +2 -2
- package/dist/cli.mjs +2 -2838
- package/dist/config-BQy8iVib.mjs +12 -0
- package/dist/{config-D6C74vFp.mjs → config-BnGHE669.mjs} +3 -3
- package/dist/{config-D6C74vFp.mjs.map → config-BnGHE669.mjs.map} +1 -1
- package/dist/{doctor-BHnei8KS.mjs → doctor-26f-Bu4P.mjs} +29 -28
- package/dist/doctor-26f-Bu4P.mjs.map +1 -0
- package/dist/{fullstack-Cmedpn8G.mjs → fullstack-CeSmhGE2.mjs} +4 -4
- package/dist/{fullstack-Cmedpn8G.mjs.map → fullstack-CeSmhGE2.mjs.map} +1 -1
- package/dist/{fullstack-e-wuEMD0.mjs → fullstack-DUPLtANA.mjs} +3 -3
- package/dist/index.d.mts +48 -3
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +2 -3
- package/dist/plugin-C3PeTJQb.mjs +11 -0
- package/dist/{plugin-BlWy4Nbd.mjs → plugin-RBStrEDQ.mjs} +3 -3
- package/dist/{plugin-BlWy4Nbd.mjs.map → plugin-RBStrEDQ.mjs.map} +1 -1
- package/dist/{project-CnU7KcYI.mjs → project-DxcX4ryE.mjs} +6 -6
- package/dist/{project-CnU7KcYI.mjs.map → project-DxcX4ryE.mjs.map} +1 -1
- package/dist/project-Op2Qt1bv.mjs +389 -0
- package/dist/{project-docs-BV-h5EmP.mjs → project-docs-BQ022LVW.mjs} +47 -11
- package/dist/project-docs-BQ022LVW.mjs.map +1 -0
- package/dist/project-docs-uEIleRls.mjs +928 -0
- package/dist/{project-root-CdqXle6R.mjs → project-root-BifjB5PL.mjs} +3 -3
- package/dist/{project-root-CdqXle6R.mjs.map → project-root-BifjB5PL.mjs.map} +1 -1
- package/dist/project-root-CtnL9FBb.mjs +11 -0
- package/dist/{prompts-D7bKHNce.mjs → prompts-j1nmMgAf.mjs} +2 -2
- package/dist/{prompts-D7bKHNce.mjs.map → prompts-j1nmMgAf.mjs.map} +1 -1
- package/dist/{rolldown-runtime-DiP_G7eI.mjs → rolldown-runtime-DOk7ha8c.mjs} +1 -1
- package/dist/{run-plugins-C5kGYAsD.mjs → run-plugins-BouWvZvo.mjs} +79 -66
- package/dist/run-plugins-BouWvZvo.mjs.map +1 -0
- package/dist/typegen-DRSOapGb.mjs +114 -0
- package/dist/typegen-DRSOapGb.mjs.map +1 -0
- package/dist/typegen-b-Siu3FR.mjs +113 -0
- package/dist/{types-BNOSmSFj.mjs → types-DSOcCoe_.mjs} +1 -1
- package/package.json +5 -5
- package/dist/doctor-BHnei8KS.mjs.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/project-docs-BV-h5EmP.mjs.map +0 -1
- package/dist/run-plugins-C5kGYAsD.mjs.map +0 -1
- package/dist/typegen-qeQ5co2C.mjs +0 -114
- package/dist/typegen-qeQ5co2C.mjs.map +0 -1
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @forinda/kickjs-cli v6.7.0
|
|
3
|
-
*
|
|
4
|
-
* Copyright (c) Felix Orinda
|
|
5
|
-
*
|
|
6
|
-
* This source code is licensed under the MIT license found in the
|
|
7
|
-
* LICENSE file in the root directory of this source tree.
|
|
8
|
-
*
|
|
9
|
-
* @license MIT
|
|
10
|
-
*/
|
|
11
|
-
import{t as e}from"./rolldown-runtime-DiP_G7eI.mjs";import{basename as t,dirname as n,join as r,relative as i,resolve as a,sep as o}from"node:path";import{statSync as s}from"node:fs";import{mkdir as c,readFile as l,readdir as u,stat as d,unlink as f,writeFile as p}from"node:fs/promises";import{globSync as m}from"glob";import{groupAssetKeys as h}from"@forinda/kickjs";import{parseSync as g}from"oxc-parser";const _=[`classes`,`tokens`,`injects`,`pluginsAndAdapters`,`augmentations`,`contextKeys`,`routes`,`moduleMounts`,`globPatterns`];function v(e){if(!e||typeof e!=`object`)return!1;let t=e;return _.every(e=>Array.isArray(t[e]))}var y=class e{path;prev;next=new Map;nextSig=new Map;constructor(e,t){this.path=e,this.prev=t}static async load(t){let n=r(t,`scan.json`),i=new Map;try{let e=await l(n,`utf-8`),t=JSON.parse(e);if(t.version===2&&t.files)for(let[e,n]of Object.entries(t.files))n&&typeof n.sig==`string`&&v(n.extract)&&i.set(e,n)}catch{}return new e(n,i)}static async signature(e){try{let t=await d(e);return`${t.mtimeMs}:${t.size}`}catch{return null}}get(e,t){let n=this.prev.get(e);return n&&n.sig===t?n.extract:null}set(e,t,n){this.next.set(e,n),this.nextSig.set(e,t)}cachedFiles(){return[...this.prev.keys()]}peek(e){return this.prev.get(e)?.extract??null}carry(e){let t=this.prev.get(e);return t?(this.next.set(e,t.extract),this.nextSig.set(e,t.sig),!0):!1}async save(){let e={};for(let[t,n]of this.next){let r=this.nextSig.get(t);r&&(e[t]={sig:r,extract:n})}let t={version:2,files:e};try{await c(n(this.path),{recursive:!0}),await p(this.path,JSON.stringify(t),`utf-8`)}catch{}}};let b=null;function x(){return b??=new Set(le),b}const S=new Set([`Get`,`Post`,`Put`,`Delete`,`Patch`]);function C(e){return typeof e==`object`&&!!e&&typeof e.type==`string`}function w(e,t){if(Array.isArray(e)){for(let n of e)w(n,t);return}if(C(e)){t(e);for(let n of Object.keys(e)){if(n===`type`)continue;let r=e[n];typeof r==`object`&&r&&w(r,t)}}}function T(e){if(!C(e))return null;if(e.type===`Literal`&&typeof e.value==`string`)return e.value;if(e.type===`TemplateLiteral`){let t=e.quasis,n=e.expressions;if(t?.length===1&&(n?.length??0)===0){let e=t[0].value?.cooked;return typeof e==`string`?e:null}}return null}function E(e){return C(e)&&e.type===`Identifier`?e.name:null}function D(e){return E(e.callee)}function O(e,t){if(!e||e.type!==`ObjectExpression`)return null;for(let n of e.properties??[]){if(n.type!==`Property`)continue;let e=n.key;if((E(e)??(e.type===`Literal`?String(e.value):T(e)))===t)return n.value}return null}function k(e){let t=e.arguments?.[0];return C(t)&&t.type===`ObjectExpression`?t:null}function A(e,t){let n=O(e,t);if(!C(n)||n.type!==`ArrayExpression`)return[];let r=[];for(let e of n.elements??[]){let t=T(e);t!==null&&r.push(t)}return r}function ee(e,t){return i(t,e).split(o).join(`/`)}function te(e){return(e.match(/:([a-zA-Z_]\w*)/g)??[]).map(e=>e.slice(1))}function ne(e,t){for(let n of e.implements??[]){let e=n.expression??n;if(E(e)===t)return!0;if(e.type===`TSQualifiedName`||e.type===`MemberExpression`){let n=e.right??e.property;if(n&&E(n)===t)return!0}}return!1}function re(e){return e.decorators??[]}function j(e){let t=e.expression;if(!C(t)||t.type!==`CallExpression`)return null;let n=D(t);return n?{name:n,call:t}:null}function ie(e){let t=new Map,n=new Set;for(let r of e.body??[]){if(r.type===`ImportDeclaration`){let e=T(r.source)??``;for(let n of r.specifiers??[]){let r=E(n.local);r&&t.set(r,{source:e})}continue}let e=r.type===`VariableDeclaration`?r:r.type===`ExportNamedDeclaration`&&C(r.declaration)?r.declaration:null;if(C(e)&&e.type===`VariableDeclaration`)for(let t of e.declarations??[]){let e=E(t.id);e&&n.add(e)}}return{imports:t,topLevelConsts:n}}function ae(e,t){let n=t.imports.get(e);return n?{identifier:e,source:n.source}:t.topLevelConsts.has(e)?{identifier:e,source:``}:{identifier:e,source:null}}function M(e,t,n){let r=E(O(e,t));return r?ae(r,n):null}function oe(e,t){for(let n of e){let e=j(n);if(!e||e.name!==`ApiQueryParams`)continue;let r=e.call.arguments?.[0],i=null;if(C(r)&&r.type===`ObjectExpression`)i=r;else{let e=E(r);if(e){let n=t.get(e);n&&n.type===`ObjectExpression`&&(i=n)}}return{filterable:A(i,`filterable`),sortable:A(i,`sortable`),searchable:A(i,`searchable`)}}return null}function se(e,t,n){let r;try{let n=g(t,e);if(n.errors.length>0)return null;r=n.program}catch{return null}let i=ee(t,n),a=ie(r),o=[],s=[],c=[],l=[],u=[],d=[],f=[],p=[],m=[],h=new Set,_=new Set,v=new Set,y=new Map;for(let e of r.body??[]){let t=e.type===`VariableDeclaration`?e:e.type===`ExportNamedDeclaration`&&C(e.declaration)?e.declaration:null;if(C(t)&&t.type===`VariableDeclaration`)for(let e of t.declarations??[]){let t=E(e.id);t&&C(e.init)&&y.set(t,e.init)}}let b=[];for(let e of r.body??[])if(e.type===`ExportNamedDeclaration`&&C(e.declaration)){let t=e.declaration;t.type===`ClassDeclaration`&&b.push({cls:t,isDefault:!1})}else if(e.type===`ExportDefaultDeclaration`&&C(e.declaration)){let t=e.declaration;t.type===`ClassDeclaration`&&b.push({cls:t,isDefault:!0})}for(let{cls:e,isDefault:n}of b){let r=E(e.id);if(!r)continue;let a=null;for(let t of re(e)){let e=j(t);if(e&&x().has(e.name)){a=e.name;break}}a?o.push({className:r,decorator:a,filePath:t,relativePath:i,isDefault:n}):ne(e,`AppModule`)&&o.push({className:r,decorator:`Module`,filePath:t,relativePath:i,isDefault:n})}for(let e of r.body??[]){if(e.type!==`ExportNamedDeclaration`||!C(e.declaration))continue;let n=e.declaration;if(n.type===`VariableDeclaration`)for(let e of n.declarations??[]){let n=E(e.id),r=e.init;!n||!C(r)||r.type!==`CallExpression`||D(r)===`defineModule`&&(o.some(e=>e.className===n)||o.push({className:n,decorator:`Module`,filePath:t,relativePath:i,isDefault:!1}))}}w(r,e=>{if(e.type===`VariableDeclarator`){let n=e.init;if(C(n)&&n.type===`CallExpression`&&D(n)===`createToken`){let r=T(n.arguments?.[0]);r!==null&&(v.add(n),s.push({name:r,variable:E(e.id),filePath:t,relativePath:i}))}return}if(e.type!==`CallExpression`){if(e.type===`Decorator`){let n=j(e);if(n?.name===`Inject`){let e=T(n.call.arguments?.[0]);e!==null&&c.push({name:e,filePath:t,relativePath:i})}}return}let n=e.callee,r=D(e);if(r===`createToken`&&!v.has(e)){let n=T(e.arguments?.[0]);n!==null&&s.push({name:n,variable:null,filePath:t,relativePath:i});return}if(r===`defineAdapter`||r===`definePlugin`){let n=T(O(k(e),`name`));if(n!==null){let e=r===`definePlugin`?`plugin`:`adapter`,a=`${r}::${n}::${t}`;h.has(a)||(h.add(a),l.push({kind:e,name:n,filePath:t,relativePath:i}))}return}if(r===`defineAugmentation`){let n=e.arguments??[],r=T(n[0]);if(r!==null){let e=C(n[1])&&n[1].type===`ObjectExpression`?n[1]:null;u.push({name:r,description:T(O(e,`description`)),example:T(O(e,`example`)),filePath:t,relativePath:i})}return}if(r===`defineContextDecorator`||r===`defineHttpContextDecorator`){let n=T(O(k(e),`key`));n!==null&&!_.has(n)&&(_.add(n),d.push({key:n,filePath:t,relativePath:i}));return}if(C(n)&&n.type===`CallExpression`){let r=n.callee;if(C(r)&&r.type===`MemberExpression`&&E(r.property)===`withParams`){let n=E(r.object);if(n===`defineContextDecorator`||n===`defineHttpContextDecorator`){let n=T(O(k(e),`key`));n!==null&&!_.has(n)&&(_.add(n),d.push({key:n,filePath:t,relativePath:i}))}}return}if(C(n)&&n.type===`MemberExpression`&&E(n.property)===`glob`){let t=n.object;C(t)&&t.type===`MetaProperty`&&w(e.arguments,e=>{let t=T(e);t!==null&&m.push(t)})}});let A=[];w(r,e=>{if(e.type===`ClassDeclaration`||e.type===`ClassExpression`){let t=E(e.id);t&&A.push({cls:e,className:t})}});for(let{cls:e,className:n}of A){let r=o.find(e=>e.className===n),s=e.body?.body;if(ne(e,`AppAdapter`))for(let e of s??[]){if(e.type!==`PropertyDefinition`||E(e.key)!==`name`)continue;let n=T(e.value);if(n===null)continue;let r=`class::${n}::${t}`;h.has(r)||(h.add(r),l.push({kind:`adapter`,name:n,filePath:t,relativePath:i}));break}for(let e of s??[]){if(e.type!==`MethodDefinition`)continue;let o=E(e.key);if(!o)continue;if(o===`routes`){ce(e.value,p);continue}if(!r)continue;let s=re(e),c=oe(s,y);for(let e of s){let s=j(e);if(!s||!S.has(s.name))continue;let l=s.call.arguments??[],u=T(l[0]),d=u&&u.length>0?u:`/`,p=C(l[1])&&l[1].type===`ObjectExpression`?l[1]:null;f.push({controller:n,method:o,httpMethod:s.name.toUpperCase(),path:d,pathParams:te(d),queryFilterable:c?.filterable??null,querySortable:c?.sortable??null,querySearchable:c?.searchable??null,bodySchema:M(p,`body`,a),querySchema:M(p,`query`,a),paramsSchema:M(p,`params`,a),responseSchema:M(p,`response`,a),filePath:t,relativePath:i,controllerIsDefaultExport:r.isDefault,mountedPath:d})}}}return w(r,e=>{if(e.type!==`Property`||E(e.key)!==`routes`)return;let t=e.value;C(t)&&(t.type===`FunctionExpression`||t.type===`ArrowFunctionExpression`)&&ce(t,p)}),{classes:o,tokens:s,injects:c,pluginsAndAdapters:l,augmentations:u,contextKeys:d,routes:f,moduleMounts:p,globPatterns:/\.module\.[mc]?[tj]sx?$/.test(t)?m:[]}}function ce(e,t){let n=[],r=[];w(e.body,e=>{if(e.type!==`Property`)return;let t=E(e.key);if(t===`path`){let t=T(e.value);t!==null&&n.push(t)}else if(t===`controller`){let t=E(e.value);t&&/^[A-Z]/.test(t)&&r.push(t)}});let i=Math.min(n.length,r.length);for(let e=0;e<i;e++)t.push({controller:r[e],mountPath:n[e]})}const le=[`Service`,`Controller`,`Repository`,`Injectable`,`Component`,`Module`],ue=[`.ts`,`.tsx`,`.mts`,`.cts`],de=[`node_modules`,`.kickjs`,`dist`,`build`,`.test.`,`.spec.`,`.d.ts`],N=new RegExp(String.raw`@(${le.join(`|`)})\s*\([^)]*\)`+String.raw`(?:\s*@[A-Z]\w*(?:\s*\([^)]*\))?)*`+String.raw`\s*export\s+(default\s+)?(?:abstract\s+)?class\s+(\w+)`,`g`),fe=new RegExp(String.raw`export\s+(default\s+)?(?:abstract\s+)?class\s+(\w+)`+String.raw`(?:\s+extends\s+\w+(?:<[^>]*>)?)?`+String.raw`\s+implements\s+[^{]*\bAppModule\b`,`g`),pe=/export\s+const\s+(\w+)\s*(?::\s*[^=]+)?=\s*defineModule\s*(?:<[^>]*>)?\s*\(/g,me=/(?:export\s+)?const\s+(\w+)\s*(?::\s*[^=]+)?=\s*createToken\s*(?:<[^>]*>)?\s*\(\s*['"`]([^'"`]+)['"`]\s*\)/g,he=/createToken\s*(?:<[^>]*>)?\s*\(\s*['"`]([^'"`]+)['"`]\s*\)/g,ge=/@Inject\s*\(\s*['"`]([^'"`]+)['"`]\s*\)/g,P=/\b(defineAdapter|definePlugin)\s*(?:<[^>]*>)?\s*\(/g,F=/\b(?:defineContextDecorator|defineHttpContextDecorator)\s*(?:\.withParams\s*<(?:[^<>]|<[^<>]*>)*>\s*\(\s*\))?\s*(?:<(?:[^<>]|<[^<>]*>)*>)?\s*\(/g,_e=new RegExp(String.raw`export\s+(?:default\s+)?(?:abstract\s+)?class\s+(\w+)`+String.raw`(?:\s+extends\s+\w+(?:<[^>]*>)?)?`+String.raw`\s+implements\s+[^{]*\bAppAdapter\b`,`g`),ve=/\bname\s*(?::\s*[^=]+)?=\s*['"`]([^'"`]+)['"`]/,ye=/\bdefineAugmentation\s*\(\s*['"`]([^'"`]+)['"`]\s*(,\s*\{)?/g,I=new RegExp(String.raw`@(${[`Get`,`Post`,`Put`,`Delete`,`Patch`].join(`|`)})\s*\(`,`g`);function L(e,t){let n=1;for(let r=t+1;r<e.length;r++){let t=e[r];if(t===`(`)n++;else if(t===`)`&&(n--,n===0))return r}return-1}function be(e,t){let n=t;for(;n<e.length;){for(;n<e.length&&/\s/.test(e[n]);)n++;if(e[n]!==`@`)break;let t=e.slice(n).match(/^@([A-Z]\w*)/);if(!t)break;for(n+=t[0].length;n<e.length&&/\s/.test(e[n]);)n++;if(e[n]===`(`){let t=L(e,n);if(t<0)return null;n=t+1}}for(;n<e.length&&/\s/.test(e[n]);)n++;for(let t of[`public`,`private`,`protected`])if(e.slice(n,n+t.length)===t&&/\s/.test(e.charAt(n+t.length))){for(n+=t.length;n<e.length&&/\s/.test(e[n]);)n++;break}if(e.slice(n,n+5)===`async`&&/\s/.test(e.charAt(n+5)))for(n+=5;n<e.length&&/\s/.test(e[n]);)n++;let r=e.slice(n).match(/^([a-zA-Z_]\w*)\s*\(/);return r?{methodName:r[1],endPos:n+r[0].length}:null}function xe(e){return(e.match(/:([a-zA-Z_]\w*)/g)??[]).map(e=>e.slice(1))}function Se(e,t){let n=e.endsWith(`/`)?e.slice(0,-1):e;return!t||t===`/`?n||`/`:n+(t.startsWith(`/`)?t:`/`+t)||`/`}const Ce=/\b(?:public\s+|private\s+|protected\s+)?routes\s*\([^)]*\)\s*(?::\s*[A-Za-z_][\w<>[\]\s,|]*\s*)?\{/g,R=/\bpath\s*:\s*['"`]([^'"`]*)['"`]/g,z=/\bcontroller\s*:\s*([A-Z]\w*)\b/g,B=/\bimport\.meta\.glob\s*\(/g;function we(e){let t=[];for(B.lastIndex=0;B.exec(e)!==null;){let n=B.lastIndex-1,r=L(e,n);if(r<0)continue;let i=e.slice(n+1,r),a=/['"`]([^'"`]+)['"`]/g,o;for(;(o=a.exec(i))!==null;)t.push(o[1])}return t}function Te(e){let t=e.replace(/[.+^$()|[\]\\]/g,`\\$&`).replace(/\?/g,`.`).replace(/\*\*\//g,`___DOUBLESTAR_SLASH___`).replace(/\*\*/g,`___DOUBLESTAR___`).replace(/\*/g,`[^/]*`).replace(/___DOUBLESTAR_SLASH___/g,`(?:.+/)?`).replace(/___DOUBLESTAR___/g,`.*`);return RegExp(`^`+t+`$`)}function Ee(e,t){let n=e.startsWith(`./`)?e:`./`+e,r=!1;for(let e of t){let t=e.startsWith(`!`);Te(t?e.slice(1):e).test(n)&&(r=!t)}return r}function De(e){let t=[];Ce.lastIndex=0;let n;for(;(n=Ce.exec(e))!==null;){let r=e.indexOf(`{`,n.index+n[0].length-1);if(r<0)continue;let i=G(e,r);if(i<0)continue;let a=e.slice(r+1,i),o=[];R.lastIndex=0;let s;for(;(s=R.exec(a))!==null;)o.push(s[1]??``);let c=[];z.lastIndex=0;let l;for(;(l=z.exec(a))!==null;)c.push(l[1]);let u=Math.min(o.length,c.length);for(let e=0;e<u;e++)t.push({controller:c[e],mountPath:o[e]})}return t}function V(e,t){let n=new RegExp(String.raw`\b${t}\s*:\s*([A-Za-z_$][\w$]*)`,`g`).exec(e);return n?n[1]:null}function H(e,t){let n=new RegExp(String.raw`import\s*(?:type\s+)?\{[^}]*\b${t}\b[^}]*\}\s*from\s*['"\`]([^'"\`]+)['"\`]`).exec(e);if(n)return n[1];let r=new RegExp(String.raw`import\s+(?:type\s+)?${t}\s+from\s*['"\`]([^'"\`]+)['"\`]`).exec(e);if(r)return r[1];let i=new RegExp(String.raw`import\s*\*\s*as\s+${t}\s+from\s*['"\`]([^'"\`]+)['"\`]`).exec(e);return i?i[1]:new RegExp(String.raw`(?:^|\n)\s*(?:export\s+)?const\s+${t}\b`).test(e)?``:null}function Oe(e,t){let n=/@ApiQueryParams\s*\(\s*([\s\S]*?)\s*\)\s*$/.exec(e);if(!n){let n=/@ApiQueryParams\s*\(([\s\S]*?)\)/.exec(e);return n?ke(n[1].trim(),t):null}return ke(n[1].trim(),t)}function ke(e,t){if(e.startsWith(`{`))return Ae(e);let n=/^([A-Za-z_]\w*)/.exec(e);if(n){let e=n[1],r=new RegExp(String.raw`const\s+${e}\s*(?::\s*[^=]+)?=\s*(\{[\s\S]*?\n\})`,`m`).exec(t);if(r)return Ae(r[1])}return{filterable:[],sortable:[],searchable:[]}}function U(e,t){let n=new RegExp(String.raw`${t}\s*:\s*\[([\s\S]*?)\]`).exec(e);return n?Array.from(n[1].matchAll(/['"`]([^'"`]+)['"`]/g)).map(e=>e[1]):[]}function Ae(e){return{filterable:U(e,`filterable`),sortable:U(e,`sortable`),searchable:U(e,`searchable`)}}async function je(e,t){let n=t.extensions??ue,a=t.exclude??de,o=[],s;try{s=await u(e,{withFileTypes:!0,encoding:`utf-8`})}catch{return o}for(let c of s){let s=r(e,c.name),l=i(t.cwd,s);a.some(e=>l.includes(e))||(c.isDirectory()?o.push(...await je(s,t)):c.isFile()&&n.some(e=>c.name.endsWith(e))&&o.push(s))}return o}function W(e,t){return i(t,e).split(o).join(`/`)}function Me(e,t,n){let r=[],i=W(t,n);N.lastIndex=0;let a;for(;(a=N.exec(e))!==null;){let[,e,n,o]=a;r.push({className:o,decorator:e,filePath:t,relativePath:i,isDefault:!!n})}fe.lastIndex=0;let o;for(;(o=fe.exec(e))!==null;){let[,e,n]=o;r.some(e=>e.className===n&&e.filePath===t)||r.push({className:n,decorator:`Module`,filePath:t,relativePath:i,isDefault:!!e})}pe.lastIndex=0;let s;for(;(s=pe.exec(e))!==null;){let[,e]=s;r.some(n=>n.className===e&&n.filePath===t)||r.push({className:e,decorator:`Module`,filePath:t,relativePath:i,isDefault:!1})}return r}function Ne(e,t,n){let r=[],i=W(t,n),a=new Set;me.lastIndex=0;let o;for(;(o=me.exec(e))!==null;){let[e,n,s]=o;a.add(e),r.push({name:s,variable:n,filePath:t,relativePath:i})}for(he.lastIndex=0;(o=he.exec(e))!==null;)a.has(o[0])||r.push({name:o[1],variable:null,filePath:t,relativePath:i});return r}function Pe(e,t,n,r,i=new Map){let a=[];if(r.length===0)return a;let o=W(t,n),s=[];for(let t of r){let n=new RegExp(String.raw`class\s+${t.className}\b`).exec(e);n?.index!==void 0&&s.push({cls:t,start:n.index})}s.sort((e,t)=>e.start-t.start);for(let n=0;n<s.length;n++){let{cls:r,start:c}=s[n],l=n+1<s.length?s[n+1].start:e.length,u=e.slice(c,l);I.lastIndex=0;let d;for(;(d=I.exec(u))!==null;){let n=d[1],s=d.index,c=I.lastIndex-1,l=L(u,c);if(l<0)continue;let f=u.slice(c+1,l),p=f.match(/^\s*['"`]([^'"`]*)['"`]/),m=p&&p[1].length>0?p[1]:`/`,h=be(u,l+1);if(!h)continue;let{methodName:g,endPos:_}=h;I.lastIndex=_;let v=Oe(u.slice(s,_),e),y=V(f,`body`),b=V(f,`query`),x=V(f,`params`),S=V(f,`response`),C=i.get(r.className)??``,w=C?Se(C,m):m;a.push({controller:r.className,method:g,httpMethod:n.toUpperCase(),path:m,pathParams:xe(w),queryFilterable:v?.filterable??null,querySortable:v?.sortable??null,querySearchable:v?.searchable??null,bodySchema:y?{identifier:y,source:H(e,y)}:null,querySchema:b?{identifier:b,source:H(e,b)}:null,paramsSchema:x?{identifier:x,source:H(e,x)}:null,responseSchema:S?{identifier:S,source:H(e,S)}:null,filePath:t,relativePath:o,controllerIsDefaultExport:r.isDefault,mountedPath:w})}}return a}function Fe(e,t,n){let r=[],i=W(t,n);ge.lastIndex=0;let a;for(;(a=ge.exec(e))!==null;)r.push({name:a[1],filePath:t,relativePath:i});return r}function G(e,t){let n=1;for(let r=t+1;r<e.length;r++){let t=e[r];if(t===`{`)n++;else if(t===`}`&&(n--,n===0))return r}return-1}function Ie(e,t,n){let r=[],i=W(t,n),a=new Set;P.lastIndex=0;let o;for(;(o=P.exec(e))!==null;){let n=o[1],s=P.lastIndex-1,c=L(e,s);if(c<0)continue;let l=e.slice(s+1,c),u=/\bname\s*:\s*['"`]([^'"`]+)['"`]/.exec(l);if(!u)continue;let d=u[1],f=`${n}::${d}::${t}`;a.has(f)||(a.add(f),r.push({kind:n===`definePlugin`?`plugin`:`adapter`,name:d,filePath:t,relativePath:i}))}_e.lastIndex=0;let s;for(;(s=_e.exec(e))!==null;){let n=s.index,o=e.indexOf(`{`,n);if(o<0)continue;let c=G(e,o);if(c<0)continue;let l=e.slice(o+1,c),u=ve.exec(l);if(!u)continue;let d=u[1],f=`class::${d}::${t}`;a.has(f)||(a.add(f),r.push({kind:`adapter`,name:d,filePath:t,relativePath:i}))}return r}function Le(e,t,n){let r=[],i=W(t,n),a=new Set;for(F.lastIndex=0;F.exec(e)!==null;){let n=F.lastIndex-1,o=L(e,n);if(o<0)continue;let s=e.slice(n+1,o),c=/\bkey\s*:\s*['"`]([^'"`]+)['"`]/.exec(s);if(!c)continue;let l=c[1];a.has(l)||(a.add(l),r.push({key:l,filePath:t,relativePath:i}))}return r}function Re(e,t,n){let r=[],i=W(t,n);ye.lastIndex=0;let a;for(;(a=ye.exec(e))!==null;){let n=a[1],o=null,s=null;if(a[2]){let t=e.indexOf(`{`,a.index+a[0].length-1);if(t>=0){let n=G(e,t);if(n>=0){let r=e.slice(t+1,n);o=ze(r,`description`),s=ze(r,`example`)}}}r.push({name:n,description:o,example:s,filePath:t,relativePath:i})}return r}function ze(e,t){let n=RegExp(`\\b${t}\\s*:\\s*(['"\`])`,`g`).exec(e);if(!n)return null;let r=n[1],i=n.index+n[0].length,a=i,o=null;for(;a<e.length;){let t=e[a];if(t===`\\`){a+=2;continue}if(t===r){o=e.slice(i,a);break}a++}return o===null?null:o.replace(/\\(.)/g,(e,t)=>t===`n`?`
|
|
12
|
-
`:t===`t`?` `:t===`r`?`\r`:t)}const Be=[`src/config/index.ts`,`src/config/env.ts`,`src/config.ts`,`src/env.ts`];async function Ve(e,t){let n=t===`src/env.ts`?Be:[t];for(let t of n){let n=a(e,t),r;try{r=await l(n,`utf-8`)}catch{continue}if(!(!/\bdefineEnv\s*\(/.test(r)&&!/\bfrom(Zod|Valibot|Yup)\s*\(/.test(r))&&/export\s+default\b/.test(r)&&!/export\s+default\s+loadEnvFromSchema\s*\(/.test(r))return{filePath:n,relativePath:W(n,e)}}return null}function He(e){let t=new Map;for(let n of e){let e=t.get(n.className)??[];e.push(n),t.set(n.className,e)}let n=[];for(let[e,r]of t)new Set(r.map(e=>e.filePath)).size>1&&n.push({className:e,classes:r});return n.sort((e,t)=>e.className.localeCompare(t.className)),n}function Ue(e,t,n){return se(e,t,n)||We(e,t,n)}function We(e,t,n){let r=Me(e,t,n);return{classes:r,tokens:Ne(e,t,n),injects:Fe(e,t,n),pluginsAndAdapters:Ie(e,t,n),augmentations:Re(e,t,n),contextKeys:Le(e,t,n),routes:Pe(e,t,n,r,new Map),moduleMounts:De(e),globPatterns:/\.module\.[mc]?[tj]sx?$/.test(t)?we(e):[]}}async function Ge(e,t,n){let r=n?await y.signature(e):null;if(n&&r){let t=n.get(e,r);if(t)return n.set(e,r,t),t}let i;try{i=await l(e,`utf-8`)}catch{return null}let a=Ue(i,e,t);return n&&r&&n.set(e,r,a),a}async function Ke(e,t,n){let r=[],i=0,a=Array.from({length:Math.min(t,e.length)},async()=>{for(;;){let t=i++;if(t>=e.length)return;r[t]=await n(e[t],t)}});return await Promise.all(a),r}async function K(e){let t=(await je(a(e.root),e)).toSorted(),n=e.cacheDir?await y.load(e.cacheDir):null,r=Ye(t,await Ke(t,16,t=>Ge(t,e.cwd,n))),i=await Ve(e.cwd,e.envFile??`src/env.ts`);return n&&await n.save(),{...r,env:i}}function qe(e,t,n){let r=n.extensions??ue,a=n.exclude??de;if(!e.startsWith(t+o)&&e!==t||!r.some(t=>e.endsWith(t)))return!1;let s=i(n.cwd,e);return!a.some(e=>s.includes(e))}async function Je(e,t){if(!e.cacheDir)return K(e);let n=a(e.root),r=await y.load(e.cacheDir),i=r.cachedFiles();if(i.length===0)return K(e);let o=new Set(t.removed.map(t=>a(e.cwd,t))),s=t.changed.map(t=>a(e.cwd,t)).filter(t=>!o.has(t)&&qe(t,n,e)),c=new Set(s),u=new Set(i);for(let e of c)u.add(e);for(let e of o)u.delete(e);let d=new Map;await Ke(s,16,async t=>{if(!u.has(t))return;let n=await y.signature(t),i;try{i=await l(t,`utf-8`)}catch{u.delete(t);return}let a=Ue(i,t,e.cwd);d.set(t,a),n&&r.set(t,n,a)});let f=[...u].toSorted(),p=Ye(f,f.map(e=>d.get(e)||(r.carry(e),r.peek(e)))),m=await Ve(e.cwd,e.envFile??`src/env.ts`);return await r.save(),{...p,env:m}}function Ye(e,t){let n=[],r=[],i=[],a=[],s=[],c=[],l=[],u=new Map;for(let e of t)if(e)for(let{controller:t,mountPath:n}of e.moduleMounts)u.has(t)||u.set(t,n);let d=new Map;for(let o=0;o<e.length;o++){let f=t[o];if(f){n.push(...f.classes),i.push(...f.tokens),a.push(...f.injects),s.push(...f.pluginsAndAdapters),c.push(...f.augmentations),l.push(...f.contextKeys),f.globPatterns.length>0&&d.set(e[o],f.globPatterns);for(let e of f.routes){let t=u.get(e.controller);if(t){let n=Se(t,e.path);r.push({...e,pathParams:xe(n),mountedPath:n})}else r.push({...e,mountedPath:e.mountedPath??e.path})}}}let f=[];for(let[e,t]of d){if(!/\.module\.[mc]?[tj]sx?$/.test(e)||t.length===0)continue;let r=e.replaceAll(o,`/`),i=r.slice(0,r.lastIndexOf(`/`));for(let a of n){if(a.decorator===`Module`)continue;let n=a.filePath.replaceAll(o,`/`);n.startsWith(i+`/`)&&n!==r&&(Ee(n.slice(i.length+1),t)||f.push({className:a.className,filePath:a.filePath,relativePath:a.relativePath,moduleFilePath:e,decorator:a.decorator}))}}n.sort((e,t)=>e.className===t.className?e.relativePath.localeCompare(t.relativePath):e.className.localeCompare(t.className)),i.sort((e,t)=>e.name.localeCompare(t.name)||e.relativePath.localeCompare(t.relativePath)),a.sort((e,t)=>e.name.localeCompare(t.name)||e.relativePath.localeCompare(t.relativePath)),r.sort((e,t)=>e.controller.localeCompare(t.controller)||e.method.localeCompare(t.method)),s.sort((e,t)=>e.name.localeCompare(t.name)||e.relativePath.localeCompare(t.relativePath)),c.sort((e,t)=>e.name.localeCompare(t.name)||e.relativePath.localeCompare(t.relativePath)),l.sort((e,t)=>e.key.localeCompare(t.key)||e.relativePath.localeCompare(t.relativePath));let p=He(n);return f.sort((e,t)=>e.relativePath.localeCompare(t.relativePath)||e.className.localeCompare(t.className)),{classes:n,routes:r,tokens:i,injects:a,collisions:p,pluginsAndAdapters:s,augmentations:c,contextKeys:l,orphanedClasses:f}}function Xe(e){let t=e.lastIndexOf(`.`);return t<=0?{stem:e,ext:``}:{stem:e.slice(0,t),ext:e.slice(t+1)}}function Ze(e){let t=e.replaceAll(`\\`,`/`),{stem:n,ext:r}=Xe(t.slice(t.lastIndexOf(`/`)+1)),i=r||`ts`,a=n.lastIndexOf(`.`);return a>0?`./**/*.${n.slice(a+1)}.${i}`:`./**/*.${i}`}function q(e){let t=new Set;for(let n of e)t.add(Ze(n.relativePath));return[...t].toSorted()}function Qe(e,t){let n=0,r=null;for(let i=t;i<e.length;i++){let t=e[i];if(r){if(t===`\\`){i++;continue}t===r&&(r=null);continue}if(t===`'`||t===`"`||t==="`")r=t;else if(t===`(`)n++;else if(t===`)`&&(n--,n===0))return i}return-1}function $e(e,t,n,r){let i=null;for(let a=n;a<r;a++){let n=e[a];if(i){if(n===`\\`){a++;continue}n===i&&(i=null);continue}if(n===`'`||n===`"`||n==="`")i=n;else if(n===t)return a}return-1}function et(e,t){let n=0,r=null;for(let i=t;i<e.length;i++){let t=e[i];if(r){if(t===`\\`){i++;continue}t===r&&(r=null);continue}if(t===`'`||t===`"`||t==="`")r=t;else if(t===`[`)n++;else if(t===`]`&&(n--,n===0))return i}return-1}function tt(e){let t=/\bimport\.meta\.glob\s*\(/g,n=[],r;for(;(r=t.exec(e))!==null;){let t=e.indexOf(`(`,r.index);if(t<0)continue;let i=Qe(e,t);i<0||n.push({start:r.index,open:t,close:i})}return n}function nt(e,t){let n=tt(e);if(n.length===0)return null;let r=n.find(t=>/\beager\s*:\s*true\b/.test(e.slice(t.open,t.close+1)))??n[0],i=e.slice(r.start,r.close+1),a=new Set(we(i).map(e=>e.startsWith(`!`)?e.slice(1):e)),o=t.filter(e=>!a.has(e));if(o.length===0)return null;let s=o.map(e=>`'${e}'`).join(`, `),c=$e(e,`[`,r.open,r.close);if(c>=0){let t=et(e,c);if(t<0||t>r.close)return null;let n=e.slice(0,t);return n+(/[[,]\s*$/.test(n)?``:`, `)+s+e.slice(t)}let l=/(['"`])((?:\\.|(?!\1).)*)\1/,u=e.slice(r.open+1,r.close),d=l.exec(u);if(!d)return null;let f=r.open+1+d.index,p=f+d[0].length;return e.slice(0,f)+`[${d[0]}, ${s}]`+e.slice(p)}const J="/* eslint-disable */\n// AUTO-GENERATED by `kick typegen`. DO NOT EDIT.\n// Re-run with `kick typegen` or rely on `kick dev` to refresh.\n",Y=new Set([`Service`,`Repository`,`Injectable`,`Component`]);var X=class extends Error{collisions;constructor(e){super(rt(e)),this.name=`TokenCollisionError`,this.collisions=e}};function rt(e){let t=[`kick typegen: token collision detected`];for(let n of e){t.push(``),t.push(` ${n.classes.length} classes named '${n.className}':`);for(let e of n.classes)t.push(` - ${e.relativePath}`)}return t.push(``),t.push(`Resolutions:`),t.push(` (a) Rename one of the classes`),t.push(` (b) Use createToken<T>('namespaced/Name') and import the token explicitly — see @forinda/kickjs`),t.push(` (c) Pass --allow-duplicates to namespace the registry keys automatically`),t.push(` (e.g. 'modules/users/UserService' instead of 'UserService')`),t.join(`
|
|
13
|
-
`)}function it(e,t){let r=i(n(t),e).split(o).join(`/`);return r=r.replace(/\.(ts|tsx|mts|cts)$/i,``),r.startsWith(`.`)||(r=`./`+r),r}function at(e){let t=e.relativePath.replace(/^src\//,``).replace(/\.(ts|tsx|mts|cts)$/i,``).split(`/`);t.pop();let n=t.join(`/`);return n?`${n}/${e.className}`:e.className}function ot(e,t,n){let r=new Set,i=[];for(let a of e){if(!Y.has(a.decorator))continue;let e=n.has(a.className)?at(a):a.className;if(r.has(e))continue;r.add(e);let o=it(a.filePath,t),s=a.isDefault?`import('${o}').default`:`import('${o}').${a.className}`;i.push(` '${e}': ${s}`)}let a=i.length?i.join(`
|
|
14
|
-
`):" // (no services discovered yet — run `kick g service <name>` to add one)";return`${J}
|
|
15
|
-
declare module '@forinda/kickjs' {
|
|
16
|
-
interface KickJsRegistry {
|
|
17
|
-
${a}
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export {}
|
|
22
|
-
`}function st(e){return/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e)}function ct(e){let t=[...new Set(e.map(e=>e.key))].toSorted().map(e=>` ${st(e)?e:JSON.stringify(e)}: true`).join(`
|
|
23
|
-
`);return`${J}
|
|
24
|
-
declare module '@forinda/kickjs' {
|
|
25
|
-
/**
|
|
26
|
-
* Key-only registry of every context key produced by a
|
|
27
|
-
* \`defineContextDecorator\` / \`defineHttpContextDecorator\` in the
|
|
28
|
-
* project. Feeds \`dependsOn\` typo-checking. Value types live in
|
|
29
|
-
* \`ContextMeta\`; this only records that the key exists.
|
|
30
|
-
*/
|
|
31
|
-
interface ContextKeys {
|
|
32
|
-
${t}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export {}
|
|
37
|
-
`}function lt(e,t,n){if(t.length===0)return`${J}
|
|
38
|
-
// ${n}
|
|
39
|
-
export type ${e} = never
|
|
40
|
-
`;let r=[...new Set(t)].toSorted();return`${J}
|
|
41
|
-
export type ${e} =
|
|
42
|
-
${r.map(e=>` | '${e}'`).join(`
|
|
43
|
-
`)}
|
|
44
|
-
`}function ut(e,t,n,r){return[...e.filter(e=>Y.has(e.decorator)).map(e=>r.has(e.className)?at(e):e.className),...t.map(e=>e.name),...n.map(e=>e.name)]}function dt(e){return e.filter(e=>e.decorator===`Module`).map(e=>e.className)}function ft(e){let t=new Map;for(let n of e)t.has(n.name)||t.set(n.name,n);let n=[...t.values()].toSorted((e,t)=>e.name.localeCompare(t.name)).map(e=>` '${e.name}': '${e.kind}'`).join(`
|
|
45
|
-
`);return`${J}
|
|
46
|
-
declare module '@forinda/kickjs' {
|
|
47
|
-
/**
|
|
48
|
-
* Map of every plugin/adapter \`name\` discovered in the project. The
|
|
49
|
-
* value type is the kind tag (\`'plugin'\` or \`'adapter'\`); the
|
|
50
|
-
* \`keyof\` of this interface narrows \`dependsOn\` so misspelled deps
|
|
51
|
-
* become compile errors instead of boot-time \`MissingMountDepError\`.
|
|
52
|
-
*/
|
|
53
|
-
interface KickJsPluginRegistry {
|
|
54
|
-
${n||" // (no plugins/adapters discovered yet — `defineAdapter`/`definePlugin` calls feed this)"}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export {}
|
|
59
|
-
`}function pt(e){if(e.length===0)return`${J}
|
|
60
|
-
// No augmentations discovered.
|
|
61
|
-
//
|
|
62
|
-
// Plugins advertise augmentable interfaces via:
|
|
63
|
-
//
|
|
64
|
-
// import { defineAugmentation } from '@forinda/kickjs'
|
|
65
|
-
// defineAugmentation('FeatureFlags', {
|
|
66
|
-
// description: 'Feature flag shape consumed by FlagsPlugin',
|
|
67
|
-
// example: '{ beta: boolean; rolloutPercentage: number }',
|
|
68
|
-
// })
|
|
69
|
-
//
|
|
70
|
-
// See \`docs/guide/typegen.md#augmentations\` for the full pattern.
|
|
71
|
-
export {}
|
|
72
|
-
`;let t=new Map;for(let n of e)t.has(n.name)||t.set(n.name,n);let n=[];for(let e of[...t.values()].toSorted((e,t)=>e.name.localeCompare(t.name))){let t=[];if(e.description)for(let n of e.description.split(`
|
|
73
|
-
`))t.push(` * ${n}`);if(e.example){t.push(` * @example`," * ```ts");for(let n of e.example.split(`
|
|
74
|
-
`))t.push(` * ${n}`);t.push(" * ```")}t.push(` * @see ${e.relativePath}`),n.push([`/**`,...t,` */`,`export interface ${e.name}Augmentation {}`].join(`
|
|
75
|
-
`))}return`${J}
|
|
76
|
-
// Catalogue of augmentable interfaces in this project. The interfaces
|
|
77
|
-
// below are documentation only — augment the source-of-truth interfaces
|
|
78
|
-
// in your own \`d.ts\` files (the framework declares the actual types).
|
|
79
|
-
|
|
80
|
-
${n.join(`
|
|
81
|
-
|
|
82
|
-
`)}
|
|
83
|
-
`}const mt=/^(kick\/)?([a-z][\w-]*\/[A-Z]\w*)(\/.+)?(:[a-z][\w-]+(:[a-z][\w-]+)*)?$/;function ht(e){let t=[];for(let n of e){let e=n.name;e.startsWith(`kickjs.`)||mt.test(e)||t.push({token:e,variable:n.variable,filePath:n.relativePath,reason:"does not match `<scope>/<PascalKey>[/<suffix>][:<instance>]`",suggestion:gt(e)})}return t}function gt(e){if(/^[A-Z]\w*$/.test(e))return`'<scope>/${e}' (e.g. 'mycorp/${e}')`;if(e.includes(`.`))return`consider '<scope>/PascalKey' instead of dotted form`;let t=/^([a-z][\w-]*)\/([a-z]\w*)$/.exec(e);if(t){let[,e,n]=t;return`'${e}/${n.charAt(0).toUpperCase()}${n.slice(1)}'`}}function _t(e,t){if(!e)return{entries:[],count:0};let n=new Map;for(let[r,i]of Object.entries(e)){if(!i||typeof i.src!=`string`)continue;let e=a(t,i.src);if(!xt(e))continue;let o=m(i.glob??`**/*`,{cwd:e,nodir:!0,dot:!1,posix:!0});o.sort();let{pairs:s}=h(r,o,{strategy:i.keys??`auto`});for(let{key:e}of s){let t=e.slice(r.length+1);n.set(e,{namespace:r,key:t})}}return{entries:[...n.values()],count:n.size}}function vt(e){let t="/* eslint-disable */\n// AUTO-GENERATED by `kick typegen`. DO NOT EDIT.\n// Re-run with `kick typegen` or rely on `kick dev` to refresh.\n";if(e.entries.length===0)return`${t}
|
|
84
|
-
declare module '@forinda/kickjs' {
|
|
85
|
-
/**
|
|
86
|
-
* Map of every typed asset discovered in the project's assetMap.
|
|
87
|
-
* (No assetMap entries discovered yet — declare with
|
|
88
|
-
* \`assetMap: { name: { src: 'src/...' } }\` in kick.config.ts.)
|
|
89
|
-
*/
|
|
90
|
-
interface KickAssets {}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export {}
|
|
94
|
-
`;let n={};for(let t of e.entries){let e=`${t.namespace}/${t.key}`.split(`/`),r=n;for(let t=0;t<e.length-1;t++){let n=e[t],i=r[n];if(i===Z){let e={};r[n]=e,r=e}else i||(r[n]={}),r=r[n]}let i=e[e.length-1];typeof r[i]!=`object`&&(r[i]=Z)}return`${t}
|
|
95
|
-
declare module '@forinda/kickjs' {
|
|
96
|
-
/**
|
|
97
|
-
* Map of every typed asset discovered in the project's assetMap.
|
|
98
|
-
* Each leaf is a \`() => string\` thunk that returns the resolved
|
|
99
|
-
* absolute path for the file in the current run mode (dev → src,
|
|
100
|
-
* prod → dist).
|
|
101
|
-
*/
|
|
102
|
-
interface KickAssets {
|
|
103
|
-
${yt(n,` `)}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
export {}
|
|
108
|
-
`}const Z=Symbol(`asset-leaf`);function yt(e,t){let n=Object.keys(e).toSorted(),r=[];for(let i of n){let n=e[i],a=bt(i)?i:JSON.stringify(i);n===Z?r.push(`${t}${a}: () => string`):(r.push(`${t}${a}: {`),r.push(yt(n,`${t} `)),r.push(`${t}}`))}return r.join(`
|
|
109
|
-
`)}function bt(e){return/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e)}function xt(e){try{return s(e).isDirectory()}catch{return!1}}var St=e({runTypegen:()=>Q,sweepStaleTypegen:()=>Dt,watchTypegen:()=>Et,writeTypegenArtifacts:()=>$});function Ct(e){let t=e.cwd??process.cwd();return{cwd:t,srcDir:a(t,e.srcDir??`src`),outDir:a(t,e.outDir??`.kickjs/types`),silent:e.silent??!1,allowDuplicates:e.allowDuplicates??!1,schemaValidator:e.schemaValidator??!1,envFile:e.envFile??`src/env.ts`}}async function Q(e={}){let{cwd:t,srcDir:n,outDir:r,silent:i,allowDuplicates:o,envFile:s}=Ct(e),c=Date.now(),l={root:n,cwd:t,cacheDir:e.noCache?void 0:a(t,`.kickjs`,`cache`),envFile:s===!1?void 0:s},u=e.changedFiles?await Je(l,e.changedFiles):await K(l);if(u.collisions.length>0&&!o)throw new X(u.collisions);let d=_t(e.assetMap,t),f=[],p=[];if(e.runPlugins!==!1){try{let{runAllPluginTypegens:n}=await import(`./run-plugins-C5kGYAsD.mjs`),{loadKickConfig:r}=await import(`./config-D6C74vFp.mjs`).then(e=>e.n);f=await n({cwd:t,config:await r(t),silent:!0,changedFiles:e.changedFiles})}catch(e){if(!i){let t=e instanceof Error?e.message:String(e);console.warn(` kick typegen: plugin pipeline failed (${t}) — continuing`)}}p.push(...await $(r,f,i))}let m=ht(u.tokens),h=Tt(u,d.count,p),g=Date.now()-c;if(!i){let e=r.replace(t+`/`,``),n=h.resolvedCollisions>0?`, ${h.resolvedCollisions} collisions namespaced`:``,i=h.envWritten?`, env typed`:``,a=h.pluginEntries>0?`, ${h.pluginEntries} plugins/adapters`:``,o=h.augmentationEntries>0?`, ${h.augmentationEntries} augmentations`:``,s=h.assetEntries>0?`, ${h.assetEntries} assets`:``;if(console.log(` kick typegen → ${h.serviceTokens} services, ${h.routeEntries} routes, ${h.moduleTokens} modules${a}${o}${s}${i}${n} → ${e} (${g}ms)`),m.length>0){console.warn(` kick typegen: ${m.length} token(s) don't match the §22.2 convention:`);for(let e of m){let t=e.variable?` [${e.variable}]`:``;console.warn(` '${e.token}' (${e.filePath})${t} — ${e.reason}`),e.suggestion&&console.warn(` → suggestion: ${e.suggestion}`)}}}return u.orphanedClasses.length>0&&await wt(u.orphanedClasses,{fix:e.fix??!1,silent:i}),{scan:u,result:h,tokenWarnings:m}}async function wt(e,{fix:t,silent:n}){let r=new Map;for(let t of e){let e=r.get(t.moduleFilePath)??[];e.push(t),r.set(t.moduleFilePath,e)}if(t){let e=0,t=[];for(let[i,a]of r){let r=q(a);try{let a=await l(i,`utf-8`),o=nt(a,r);o&&o!==a?(await p(i,o),e++,n||console.log(` kick typegen --fix: patched ${i}\n + ${r.join(`, `)}`)):t.push(i)}catch{t.push(i)}}if(!n&&(e>0&&console.log(` kick typegen --fix: updated ${e} module glob(s) — re-run typegen to pick up the now-loaded classes.`),t.length>0)){console.warn(` kick typegen --fix: could not auto-patch ${t.length} module(s) (no import.meta.glob() call found) — add the patterns by hand:`);for(let e of t){let t=r.get(e)??[];console.warn(` ${e}: ${q(t).join(`, `)}`)}}return}if(!n){console.warn(` kick typegen: ${e.length} decorated class(es) not matched by any module's import.meta.glob():`);for(let[e,t]of r){for(let e of t)console.warn(` @${e.decorator} ${e.className} (${e.relativePath})`);let n=q(t);console.warn(` → add to import.meta.glob([...]) in ${e}:`),console.warn(` ${n.map(e=>`'${e}'`).join(`, `)}`)}console.warn(" → or run `kick typegen --fix` to apply these automatically.")}}function Tt(e,t,n){let r=new Set(e.collisions.map(e=>e.className)),i=e.classes.filter(e=>Y.has(e.decorator)),a=ut(e.classes,e.tokens,e.injects,r);return{registryEntries:i.length,serviceTokens:new Set(a).size,moduleTokens:dt(e.classes).length,routeEntries:e.routes.length,pluginEntries:new Set(e.pluginsAndAdapters.map(e=>e.name)).size,augmentationEntries:new Set(e.augmentations.map(e=>e.name)).size,assetEntries:t,envWritten:e.env!==null,written:n,resolvedCollisions:e.collisions.length}}async function $(e,t,i){await c(e,{recursive:!0}),await p(r(n(e),`.gitignore`),`# Auto-generated by kick typegen
|
|
110
|
-
*
|
|
111
|
-
`,`utf-8`);let a=t.filter(e=>e.outFile).map(e=>e.outFile);return await Dt(e,a,t,i),a}async function Et(e={}){let t=Ct(e),{srcDir:n,silent:r,cwd:i}=t,a={...t,allowDuplicates:!0,runPlugins:!1,noCache:e.noCache},o=process.env.KICKJS_WATCH_POLLING===`1`||process.env.KICKJS_WATCH_POLLING===`true`,[{runAllPluginTypegens:s},{loadKickConfig:c}]=await Promise.all([import(`./run-plugins-C5kGYAsD.mjs`),import(`./config-D6C74vFp.mjs`).then(e=>e.n)]),l=await c(i),u=async()=>{try{await Q({...a})}catch(e){if(r)return;if(e instanceof X)console.error(`
|
|
112
|
-
`+e.message+`
|
|
113
|
-
`);else{let t=e instanceof Error?e.message:String(e);console.error(` kick typegen failed: ${t}`)}}},d=async()=>{try{let e=await s({cwd:i,config:l,silent:!0});await $(t.outDir,e,!0)}catch{}};await u(),await d();let{watch:f}=await import(`node:fs`),p=null,m=e=>{e&&/\.(ts|tsx|mts|cts)$/.test(e)&&(e.includes(`.kickjs`)||e.endsWith(`.d.ts`)||(p&&clearTimeout(p),p=setTimeout(()=>{u().then(d)},100)))};if(o){r||console.log(` kick typegen: polling mode (KICKJS_WATCH_POLLING)`);let e=setInterval(()=>{u().then(d)},2e3);return()=>clearInterval(e)}let h;try{h=f(n,{recursive:!0},(e,t)=>{m(t)})}catch(e){r||console.warn(` kick typegen: watch mode unavailable (${e?.message??e}). Falling back to polling.`);let t=setInterval(()=>{u().then(d)},2e3);return()=>clearInterval(t)}return()=>{p&&clearTimeout(p),h.close()}}async function Dt(e,n,r,i){let o=new Set;for(let e of n)o.add(t(e));for(let e of r)e.outFile&&o.add(t(e.outFile));let s;try{s=await u(e)}catch{return[]}let c=[];for(let t of s){if(!Ot.has(t)||o.has(t))continue;let n=a(e,t);try{if(!(await d(n)).isFile())continue;await f(n),c.push(t)}catch{}}return c.length>0&&!i&&console.log(` kick typegen: swept ${c.length} stale file(s): ${c.join(`, `)}`),c}const Ot=new Set([`assets.d.ts`,`env.ts`,`routes.ts`,`registry.d.ts`,`services.d.ts`,`modules.d.ts`,`plugins.d.ts`,`augmentations.d.ts`,`index.d.ts`]);export{_t as a,dt as c,ct as d,ft as f,Je as g,K as h,$ as i,ut as l,lt as m,St as n,vt as o,ot as p,Et as r,X as s,Q as t,pt as u};
|
|
114
|
-
//# sourceMappingURL=typegen-qeQ5co2C.mjs.map
|