ts-ref-kit 1.0.15 → 1.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/cjs/parser/index.cjs +2 -2
  2. package/dist/esm/parser/index.js +3 -3
  3. package/package.json +8 -12
  4. package/types/index.d.ts +2 -0
  5. package/types/parser/index.d.ts +3 -0
  6. package/types/parser/path-match.d.ts +7 -0
  7. package/types/parser/reflect-loader.d.ts +10 -0
  8. package/types/parser/reflect-parser-plugin.d.ts +7 -0
  9. package/{dist/types/parser/index.d.ts → types/parser/reflect-parser.d.ts} +82 -110
  10. package/types/reflect-json/Mappable.d.ts +13 -0
  11. package/types/reflect-json/decorate.d.ts +18 -0
  12. package/types/reflect-json/index.d.ts +6 -0
  13. package/types/reflect-json/json-translation.d.ts +38 -0
  14. package/types/reflect-json/reflect-extension.d.ts +13 -0
  15. package/types/reflect-json/types.d.ts +15 -0
  16. package/types/reflect-json/utils.d.ts +9 -0
  17. package/types/reflect-types/ClassDefinition.d.ts +28 -0
  18. package/types/reflect-types/EnumDefinition.d.ts +8 -0
  19. package/types/reflect-types/InterfaceDefinition.d.ts +18 -0
  20. package/types/reflect-types/MethodDefinition.d.ts +15 -0
  21. package/types/reflect-types/PropertyDefinition.d.ts +18 -0
  22. package/types/reflect-types/assert-type.d.ts +14 -0
  23. package/types/reflect-types/function-validate.d.ts +10 -0
  24. package/types/reflect-types/index.d.ts +11 -0
  25. package/types/reflect-types/package.d.ts +10 -0
  26. package/types/reflect-types/reflect-context.d.ts +16 -0
  27. package/types/reflect-types/reflect-definitions.d.ts +104 -0
  28. package/types/reflect-types/reflect-types.d.ts +20 -0
  29. package/types/reflect-types/reflect-validate.d.ts +24 -0
  30. package/dist/types/index.d.ts +0 -455
  31. package/dist/types/tsdoc-metadata.json +0 -11
@@ -1,3 +1,3 @@
1
- var me=Object.create;var C=Object.defineProperty;var ye=Object.getOwnPropertyDescriptor;var de=Object.getOwnPropertyNames;var ge=Object.getPrototypeOf,Te=Object.prototype.hasOwnProperty;var De=(e,n)=>{for(var t in n)C(e,t,{get:n[t],enumerable:!0})},X=(e,n,t,s)=>{if(n&&typeof n=="object"||typeof n=="function")for(let l of de(n))!Te.call(e,l)&&l!==t&&C(e,l,{get:()=>n[l],enumerable:!(s=ye(n,l))||s.enumerable});return e};var A=(e,n,t)=>(t=e!=null?me(ge(e)):{},X(n||!e||!e.__esModule?C(t,"default",{value:e,enumerable:!0}):t,e)),we=e=>X(C({},"__esModule",{value:!0}),e);var z=(e,n,t)=>new Promise((s,l)=>{var r=m=>{try{D(t.next(m))}catch(w){l(w)}},o=m=>{try{D(t.throw(m))}catch(w){l(w)}},D=m=>m.done?s(m.value):Promise.resolve(m.value).then(r,o);D((t=t.apply(e,n)).next())});var Ce={};De(Ce,{DEBUG_CONFIG:()=>I,parseSource:()=>j,reflectLoader:()=>H,reflectParserPlugin:()=>ke,setupReflectTypes:()=>he,updateReflectModules:()=>Q});module.exports=we(Ce);var F=A(require("typescript"),1);var i=A(require("typescript"),1),E=A(require("fs"),1),$=A(require("process"),1),x=A(require("path"),1),te=require("url");var I={OUTPUT_LOG:!1},P=new Map,_=new Map,G=new Map,M=new Map,J=new Map,L=new Set,Y={[i.default.SyntaxKind.BooleanKeyword]:"boolean",[i.default.SyntaxKind.StringKeyword]:"string",[i.default.SyntaxKind.BigIntKeyword]:"bigint",[i.default.SyntaxKind.NumberKeyword]:"number",[i.default.SyntaxKind.SymbolKeyword]:"symbol",[i.default.SyntaxKind.VoidKeyword]:"void",[i.default.SyntaxKind.UndefinedKeyword]:"undefined",[i.default.SyntaxKind.UnknownKeyword]:"unknown",[i.default.SyntaxKind.AnyKeyword]:"any",[i.default.SyntaxKind.ObjectKeyword]:"object"},O="any",ie=["string","number","boolean","bigint","symbol"],se=["any","Promise","Date","Error","undefined","unknown","object","Map","Set"],re=["Mappable","EnableReflect"];[...ie,...se,...re].forEach(ce);re.forEach(e=>_.set(e,{name:e}));var v,Z=!1,h=Reflect;function he(s,l){return z(this,arguments,function*(e,n,t=$.cwd()){if(t=x.resolve(t),h.__classes===void 0){e=ue(e),j(e,n),h.__classes={};for(let[r,o]of P)h.__classes[r]=o;h.__interfaces={};for(let[r,o]of _)h.__interfaces[r]=o;h.__typeAliases={};for(let[r,o]of M)h.__typeAliases[r]=o;h.__constTypes={};for(let[r,o]of J)h.__constTypes[r]=o;yield Promise.all(e.map(r=>Q(r,t)))}})}function Q(e,n){return z(this,null,function*(){if(!E.existsSync(e))return;if(E.statSync(e).isDirectory()){E.readdirSync(e).forEach(D=>{Q(x.join(e,D),n)});return}let s=x.join(n,e).replace(/\.ts$/,".js"),r=yield import((0,te.pathToFileURL)(s).href);h.__classDef={},Object.values(r).forEach(o=>{typeof o=="function"&&(h.__classDef[o.name]=o)})})}function j(e,n){if(e||(e=[$.cwd()]),e=ue(e),!Z){let t=ae(e,n),s=i.default.createProgram(t,{});v=s.getTypeChecker(),t=t.map(r=>ee(r)),s.getSourceFiles().filter(r=>t.includes(ee(r.fileName))).forEach(r=>{b(`parse file: ${r.fileName}`),oe(r)});for(let r of L.keys())!P.has(r)&&!_.has(r)&&!G.has(r)&&!M.has(r)&&!ie.includes(r)&&!se.includes(r)&&(b(`remove unknown typeName: ${r}`),L.delete(r));Array.from(P.values()).forEach(Oe),Array.from(_.values()).forEach(Pe),[P,_,M].forEach(Ke),Z=!0}return{classDefinitions:P,interfaceDefinitions:_,enumDefinitions:G,typeAliasDefinitions:M,constTypeDefinitions:J}}function ae(e,n){let t=[];return e.forEach(s=>{if(s=x.resolve(s),Ae(s,n)){b(`ignore excluded ${s}`);return}if(!E.existsSync(s)){console.error(`Path ${s} does not exist.`);return}if(E.statSync(s).isFile()){t.push(s);return}E.readdirSync(s).forEach(o=>t.push(...ae([x.join(s,o)],n)))}),t}function oe(e){i.default.isClassDeclaration(e)?Re(e):i.default.isInterfaceDeclaration(e)?xe(e):i.default.isEnumDeclaration(e)?be(e):i.default.isTypeAliasDeclaration(e)?Ee(e):i.default.isConstTypeReference(e)?Se(e):e.forEachChild(oe)}function Re(e){var D,m,w,R,u,T,K,k,U,y,f,d;let n=c(e.name);if(!n)return;let t=c((w=(m=(D=e.heritageClauses)==null?void 0:D.find(a=>a.token===i.default.SyntaxKind.ExtendsKeyword))==null?void 0:m.types)==null?void 0:w[0].expression),s=(u=(R=e.heritageClauses)==null?void 0:R.find(a=>a.token===i.default.SyntaxKind.ImplementsKeyword))==null?void 0:u.types.map(a=>c(a.expression)),l=[],r=[];for(let a of e.members)if(i.default.isPropertyDeclaration(a))l.push({name:c(a.name),isOptional:a.questionToken!==void 0,type:g(a),isPrivate:(T=a.modifiers)==null?void 0:T.some(p=>p.kind===i.default.SyntaxKind.PrivateKeyword),isStatic:(K=a.modifiers)==null?void 0:K.some(p=>p.kind===i.default.SyntaxKind.StaticKeyword)});else if(i.default.isMethodDeclaration(a))r.push({name:c(a.name),returnType:g(a),isPrivate:(k=a.modifiers)==null?void 0:k.some(p=>p.kind===i.default.SyntaxKind.PrivateKeyword),isStatic:(U=a.modifiers)==null?void 0:U.some(p=>p.kind===i.default.SyntaxKind.StaticKeyword),isAsync:(y=a.modifiers)==null?void 0:y.some(p=>p.kind===i.default.SyntaxKind.AsyncKeyword),args:a.parameters.map(p=>({name:c(p.name),type:g(p),isOptional:p.questionToken!==void 0}))});else if(i.default.isGetAccessorDeclaration(a)){let p=l.find(N=>N.name===c(a.name));p||(p={name:c(a.name),isOptional:a.questionToken===void 0,type:g(a)},l.push(p)),p.accessor=p.accessor||{},p.accessor.getter={isPrivate:((f=a.modifiers)==null?void 0:f.some(N=>N.kind===i.default.SyntaxKind.PrivateKeyword))||!1},p.isPrivate=p.accessor.getter.isPrivate}else if(i.default.isSetAccessorDeclaration(a)){let p=l.find(N=>N.name===c(a.name));p||(p={name:c(a.name),isOptional:a.questionToken===void 0,type:g(a)},l.push(p)),p.accessor=p.accessor||{},p.accessor.setter={isPrivate:((d=a.modifiers)==null?void 0:d.some(N=>N.kind===i.default.SyntaxKind.PrivateKeyword))||!1}}let o={name:n,superClassName:t,implementations:s,properties:l,methods:r};b(`Define class: ${c(e.name)}`),P.set(n,o)}function xe(e){var D,m,w,R;let n=c(e.name);if(!n)return;let t=((m=(D=e.heritageClauses)==null?void 0:D.find(u=>u.token===i.default.SyntaxKind.ExtendsKeyword))==null?void 0:m.types.map(u=>c(u.expression)))||[],s=[],l=[],r;for(let u of e.members)i.default.isPropertySignature(u)?s.push({name:c(u.name),isOptional:u.questionToken!==void 0,type:g(u),isPrivate:((w=u.modifiers)==null?void 0:w.some(T=>T.kind===i.default.SyntaxKind.PrivateKeyword))||!1}):i.default.isMethodSignature(u)?l.push({name:u.name.text,returnType:g(u),isPrivate:((R=u.modifiers)==null?void 0:R.some(T=>T.kind===i.default.SyntaxKind.PrivateKeyword))||!1,args:u.parameters.map(T=>({name:c(T.name),type:g(T),isOptional:T.questionToken!==void 0}))}):i.default.isIndexSignatureDeclaration(u)&&(r=g(u));let o=_.get(n);o?(o.implementations=q(o.implementations||[],t),o.methods=q(o.methods||[],l,(u,T)=>u.name===T.name),o.properties=q(o.properties||[],s,(u,T)=>u.name===T.name),o.indexElementType=r,b(`Merge interface ${c(e.name)}`)):(o={name:n,implementations:t,methods:l,properties:s,indexElementType:r},_.set(n,o),b(`Define interface ${c(e.name)}`))}function be(e){let n=c(e.name);n&&(G.set(n,{name:n,members:e.members.map(t=>({name:c(t.name),initializer:c(t.initializer)}))}),b(`Define enum: ${c(e.name)}`))}function Ee(e){b(`Define typeAlias: ${c(e.name)}`),M.set(c(e.name),g(e))}function Se(e){let n=e.parent.parent;i.default.isVariableDeclaration(n)&&n.initializer&&i.default.isAsExpression(n.initializer)&&J.set(c(n.name),fe(n.initializer.expression))}function fe(e){return i.default.isArrayLiteralExpression(e)?_e(e):i.default.isObjectLiteralExpression(e)?Ne(e):i.default.isNumericLiteral(e)?"number":i.default.isStringLiteral(e)?"string":i.default.isBigIntLiteral(e)?"bigint":[i.default.SyntaxKind.TrueKeyword,i.default.SyntaxKind.FalseKeyword].includes(e.kind)?"boolean":O}function _e(e){let n=[];return e.elements.forEach(t=>{if(i.default.isStringLiteral(t))return n.push(c(t))}),n.length===0?O:n.length===1?n[0]:{unionMembers:n}}function Ne(e){let n=[];return e.properties.map(t=>{i.default.isPropertyAssignment(t)?n.push({name:c(t.name),type:fe(t.initializer)}):b(`unsupported property: ${t.name}`)}),{typeLiteralMembers:n}}function ce(e){L.add(e)}function g(e,n=!1){if(e.type&&!n)return S(e.type);if(!v)return console.error("TypeChecker not initialized!"),O;let t=v.getTypeAtLocation(e),s=v.typeToTypeNode(t,void 0,void 0);return s?S("type"in s?s.type:s):O}function S(e){let n={};if(e===void 0)return O;if(i.default.isUnionTypeNode(e))n.unionMembers=e.types.map(S);else if(i.default.isIntersectionTypeNode(e))n.intersectionMembers=e.types.map(S);else if(i.default.isLiteralTypeNode(e))n.literalValue=c(e.literal);else if(i.default.isTypeLiteralNode(e)){let t=[];e.members.forEach(s=>{i.default.isPropertySignature(s)?t.push({name:c(s.name),isOptional:s.questionToken!==void 0,type:g(s)}):i.default.isIndexSignatureDeclaration(s)?n.indexElementType=g(s):t.push({name:c(s.name)||"",isOptional:s.questionToken!==void 0,type:S()})}),n.typeLiteralMembers=t}else if(i.default.isArrayTypeNode(e))n.arrayElementType=S(e.elementType);else if(i.default.isFunctionTypeNode(e))n.isFunction=!0;else if(i.default.isTypeReferenceNode(e))if(ce(c(e.typeName)),e.typeArguments)n.generics=[c(e.typeName),...e.typeArguments.map(t=>S(t))];else return c(e.typeName);else{if(i.default.isIndexedAccessTypeNode(e))return g(e,!0);if(i.default.isThisTypeNode(e))return g(e);if(i.default.isParenthesizedTypeNode(e))return g(e);if(i.default.isConditionalTypeNode(e))return g(e);if(i.default.isTypeQueryNode(e))return g(e);if(i.default.isConstructorTypeNode(e))n.isConstructor=!0;else if(i.default.isTupleTypeNode(e))n.tupleMembers=e.elements.map(S);else{if(Object.keys(Y).includes(String(e.kind)))return Y[e.kind]||O;if(i.default.isOptionalTypeNode(e))Object.assign(n,g(e)),n.isOptionalInTuple=!0;else if(i.default.isNamedTupleMember(e))Object.assign(n,g(e));else return i.default.isTypeOperatorNode(e)&&e.operator===i.default.SyntaxKind.KeyOfKeyword,g(e,!0)}}return n}var q=(e,n,t)=>[...(e==null?void 0:e.filter(s=>!(n!=null&&n.some(l=>(t||(()=>l===s))(l,s)))))||[],...n||[]];function V(e){if(e!==void 0&&e!==O)return typeof e=="string"?L.has(e)?e:void 0:e}function Oe(e){var n,t;(n=e.methods)==null||n.forEach(pe),(t=e.properties)==null||t.forEach(le)}function Pe(e){var n,t;(n=e.methods)==null||n.forEach(pe),(t=e.properties)==null||t.forEach(le)}function le(e){e.type=V(e.type)}function pe(e){var n;(n=e.args)==null||n.forEach(t=>t.type=V(t.type)),e.returnType=V(e.returnType)}function c(e){if(!e)return e;if(e.end<0)return e.text;try{return i.default.isQualifiedName(e)?c(e.right):e.getText()}catch(n){return e.text}}function B(e){e&&Object.entries(e).forEach(n=>{let[t,s]=n;s instanceof Array&&s.length===0||s===!1||s===void 0?delete e[t]:s.constructor===Array?s.forEach(B):s.constructor===Object&&B(s)})}function Ke(e){for(let n of e.values())B(n)}function Ae(e,n){return n?(n=n instanceof Array?n:[n],n.some(t=>(t instanceof RegExp||(t=new RegExp(t.replace(/\./g,"\\.").replace(/\*/g,".*"))),e.match(t)))):!1}function ee(e,n=$.cwd()){return ne(e).replace(ne(n)+"/","")}function ne(e){let n=x.sep;return e.split(n).join("/")}function ue(e){return e instanceof Array?e:[e]}function b(e){I.OUTPUT_LOG&&console.log(e)}function W(e,n){let t=l=>{let r=e.replace(/\\/g,"/"),o=l.replace(/\\/g,"/");o=o.replace(/\*\*/g,"<<double_star>>");let m=o.replace(/([.+^${}()|[\]\\])/g,"\\$1").replace(/<<double_star>>/g,".*").replace(/\*/g,"[^/]*");return!l.startsWith("/")&&!l.startsWith("*")&&(m=".*"+m),m="^"+m+"$",new RegExp(m).test(r)};return(n instanceof Array?n:[n]).some(t)}function H(e){let{sourcePaths:n,exclude:t,forEnabledClassOnly:s,outputLog:l}=e;if(l&&(I.OUTPUT_LOG=!0),!n)throw new Error("need provide source paths for reflect loader");let{classDefinitions:r,interfaceDefinitions:o,enumDefinitions:D,typeAliasDefinitions:m}=j(n,t),w=[],R=[];function u(y){let f=r.get(y),d=[];return f?(f.superClassName&&d.push(f.superClassName),d.push(...f.implementations||[])):(f=o.get(y),f?d.push(...f.implementations||[]):(f=m.get(y),f&&d.push(...f.implementations||[]))),d.flatMap(a=>[a,...u(a)])||[]}function T(y,f){return u(y.name).includes(f)}function K(y){if(F.default.isClassDeclaration(y)&&y.name!==void 0){let f=y.name.text,d=r.get(f);if(!f||!d||s&&!T(d,"EnableReflect"))return;R.push(`Reflect.__classDef = Object.assign(Reflect.__classDef || {}, { ${f} })`);return}y.forEachChild(K)}function k(){let y=[];return r.forEach((f,d)=>{s&&!T(f,"EnableReflect")||y.push(`Reflect.__classes = Object.assign(Reflect.__classes || {}, { ${d}: ${JSON.stringify(f)} })`)}),o.forEach((f,d)=>{s&&!T(f,"EnableReflect")||y.push(`Reflect.__interfaces = Object.assign(Reflect.__interfaces || {}, { ${d}: ${JSON.stringify(f)} })`)}),D.forEach((f,d)=>{y.push(`Reflect.__enums = Object.assign(Reflect.__enums || {}, { ${d}: ${JSON.stringify(f)} })`)}),m.forEach((f,d)=>{y.push(`Reflect.__typeAliases = Object.assign(Reflect.__typeAliases || {}, { ${d}: ${JSON.stringify(f)} })`)}),y.join(`
2
- `)}return{outputAllMetas:k,transform:(y,f)=>{let d=(typeof n=="string"?[n]:n).map(a=>a+"/**.ts");if(W(f,d))try{let a=F.default.createSourceFile(f,y,F.default.ScriptTarget.Latest,!1);return w.length=0,R.length=0,K(a),`${w.join(";")};${y};${R.join(";")}`}catch(a){return console.error(`[reflect-parser-plugin] Error processing ${f}:`,a),null}}}}var Me=process.cwd().replace(/\\/g,"/")+"/";function ke(e){let n=H(e);return{name:"reflect-parser-plugin",enforce:"pre",transform:(t,s)=>(s=s.replace(Me,""),s===e.entry?`${n.outputAllMetas()}
1
+ var me=Object.create;var C=Object.defineProperty;var de=Object.getOwnPropertyDescriptor;var ye=Object.getOwnPropertyNames;var ge=Object.getPrototypeOf,Te=Object.prototype.hasOwnProperty;var he=(e,n)=>{for(var t in n)C(e,t,{get:n[t],enumerable:!0})},X=(e,n,t,s)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of ye(n))!Te.call(e,o)&&o!==t&&C(e,o,{get:()=>n[o],enumerable:!(s=de(n,o))||s.enumerable});return e};var A=(e,n,t)=>(t=e!=null?me(ge(e)):{},X(n||!e||!e.__esModule?C(t,"default",{value:e,enumerable:!0}):t,e)),De=e=>X(C({},"__esModule",{value:!0}),e);var z=(e,n,t)=>new Promise((s,o)=>{var r=m=>{try{h(t.next(m))}catch(D){o(D)}},f=m=>{try{h(t.throw(m))}catch(D){o(D)}},h=m=>m.done?s(m.value):Promise.resolve(m.value).then(r,f);h((t=t.apply(e,n)).next())});var ve={};he(ve,{DEBUG_CONFIG:()=>I,parseSource:()=>F,reflectLoader:()=>H,reflectParserPlugin:()=>ke,setupReflectTypes:()=>we,updateReflectModules:()=>Q});module.exports=De(ve);var j=A(require("typescript"),1);var i=A(require("typescript"),1),E=A(require("fs"),1),k=A(require("process"),1),R=A(require("path"),1),te=require("url");var I={OUTPUT_LOG:!1},O=new Map,P=new Map,G=new Map,M=new Map,J=new Map,$=new Set,Y={[i.default.SyntaxKind.BooleanKeyword]:"boolean",[i.default.SyntaxKind.StringKeyword]:"string",[i.default.SyntaxKind.BigIntKeyword]:"bigint",[i.default.SyntaxKind.NumberKeyword]:"number",[i.default.SyntaxKind.SymbolKeyword]:"symbol",[i.default.SyntaxKind.VoidKeyword]:"void",[i.default.SyntaxKind.UndefinedKeyword]:"undefined",[i.default.SyntaxKind.UnknownKeyword]:"unknown",[i.default.SyntaxKind.AnyKeyword]:"any",[i.default.SyntaxKind.ObjectKeyword]:"object"},N="any",ie=["string","number","boolean","bigint","symbol"],se=["any","Promise","Date","Error","undefined","unknown","object","Map","Set"],re=["Mappable","EnableReflect"];[...ie,...se,...re].forEach(ce);re.forEach(e=>P.set(e,{name:e}));var L,Z=!1,w=Reflect;function we(e){return z(this,null,function*(){let{filePaths:n,exclude:t,sourceFolder:s,distFolder:o}=e;if(s=R.resolve(s||k.cwd()),o=R.resolve(o||k.cwd()),w.__classes===void 0){n=ue(n).map(r=>R.join(s,r)),F(n,t),w.__classes={};for(let[r,f]of O)w.__classes[r]=f;w.__interfaces={};for(let[r,f]of P)w.__interfaces[r]=f;w.__typeAliases={};for(let[r,f]of M)w.__typeAliases[r]=f;w.__constTypes={};for(let[r,f]of J)w.__constTypes[r]=f;yield Promise.all(n.map(r=>Q(r,o)))}})}function Q(e,n){return z(this,null,function*(){if(!E.existsSync(e))return;if(E.statSync(e).isDirectory()){E.readdirSync(e).forEach(h=>{Q(R.join(e,h),n)});return}let s=R.join(n,e).replace(/\.ts$/,".js"),r=yield import((0,te.pathToFileURL)(s).href);w.__classDef={},Object.values(r).forEach(f=>{typeof f=="function"&&(w.__classDef[f.name]=f)})})}function F(e,n){if(e||(e=[k.cwd()]),e=ue(e),!Z){let t=ae(e,n),s=i.default.createProgram(t,{});L=s.getTypeChecker(),t=t.map(r=>ee(r)),s.getSourceFiles().filter(r=>t.includes(ee(r.fileName))).forEach(r=>{b(`parse file: ${r.fileName}`),oe(r)});for(let r of $.keys())!O.has(r)&&!P.has(r)&&!G.has(r)&&!M.has(r)&&!ie.includes(r)&&!se.includes(r)&&(b(`remove unknown typeName: ${r}`),$.delete(r));Array.from(O.values()).forEach(Ne),Array.from(P.values()).forEach(Oe),[O,P,M].forEach(Ke),Z=!0}return{classDefinitions:O,interfaceDefinitions:P,enumDefinitions:G,typeAliasDefinitions:M,constTypeDefinitions:J}}function ae(e,n){let t=[];return e.forEach(s=>{if(s=R.resolve(s),Ae(s,n)){b(`ignore excluded ${s}`);return}if(!E.existsSync(s)){console.error(`Path ${s} does not exist.`);return}if(E.statSync(s).isFile()){t.push(s);return}E.readdirSync(s).forEach(f=>t.push(...ae([R.join(s,f)],n)))}),t}function oe(e){i.default.isClassDeclaration(e)?Re(e):i.default.isInterfaceDeclaration(e)?xe(e):i.default.isEnumDeclaration(e)?be(e):i.default.isTypeAliasDeclaration(e)?Ee(e):i.default.isConstTypeReference(e)?Se(e):e.forEachChild(oe)}function Re(e){var h,m,D,x,u,T,K,v,U,d,c,y;let n=l(e.name);if(!n)return;let t=l((D=(m=(h=e.heritageClauses)==null?void 0:h.find(a=>a.token===i.default.SyntaxKind.ExtendsKeyword))==null?void 0:m.types)==null?void 0:D[0].expression),s=(u=(x=e.heritageClauses)==null?void 0:x.find(a=>a.token===i.default.SyntaxKind.ImplementsKeyword))==null?void 0:u.types.map(a=>l(a.expression)),o=[],r=[];for(let a of e.members)if(i.default.isPropertyDeclaration(a))o.push({name:l(a.name),isOptional:a.questionToken!==void 0,type:g(a),isPrivate:(T=a.modifiers)==null?void 0:T.some(p=>p.kind===i.default.SyntaxKind.PrivateKeyword),isStatic:(K=a.modifiers)==null?void 0:K.some(p=>p.kind===i.default.SyntaxKind.StaticKeyword)});else if(i.default.isMethodDeclaration(a))r.push({name:l(a.name),returnType:g(a),isPrivate:(v=a.modifiers)==null?void 0:v.some(p=>p.kind===i.default.SyntaxKind.PrivateKeyword),isStatic:(U=a.modifiers)==null?void 0:U.some(p=>p.kind===i.default.SyntaxKind.StaticKeyword),isAsync:(d=a.modifiers)==null?void 0:d.some(p=>p.kind===i.default.SyntaxKind.AsyncKeyword),args:a.parameters.map(p=>({name:l(p.name),type:g(p),isOptional:p.questionToken!==void 0}))});else if(i.default.isGetAccessorDeclaration(a)){let p=o.find(_=>_.name===l(a.name));p||(p={name:l(a.name),isOptional:a.questionToken===void 0,type:g(a)},o.push(p)),p.accessor=p.accessor||{},p.accessor.getter={isPrivate:((c=a.modifiers)==null?void 0:c.some(_=>_.kind===i.default.SyntaxKind.PrivateKeyword))||!1},p.isPrivate=p.accessor.getter.isPrivate}else if(i.default.isSetAccessorDeclaration(a)){let p=o.find(_=>_.name===l(a.name));p||(p={name:l(a.name),isOptional:a.questionToken===void 0,type:g(a)},o.push(p)),p.accessor=p.accessor||{},p.accessor.setter={isPrivate:((y=a.modifiers)==null?void 0:y.some(_=>_.kind===i.default.SyntaxKind.PrivateKeyword))||!1}}let f={name:n,superClassName:t,implementations:s,properties:o,methods:r};b(`Define class: ${l(e.name)}`),O.set(n,f)}function xe(e){var h,m,D,x;let n=l(e.name);if(!n)return;let t=((m=(h=e.heritageClauses)==null?void 0:h.find(u=>u.token===i.default.SyntaxKind.ExtendsKeyword))==null?void 0:m.types.map(u=>l(u.expression)))||[],s=[],o=[],r;for(let u of e.members)i.default.isPropertySignature(u)?s.push({name:l(u.name),isOptional:u.questionToken!==void 0,type:g(u),isPrivate:((D=u.modifiers)==null?void 0:D.some(T=>T.kind===i.default.SyntaxKind.PrivateKeyword))||!1}):i.default.isMethodSignature(u)?o.push({name:u.name.text,returnType:g(u),isPrivate:((x=u.modifiers)==null?void 0:x.some(T=>T.kind===i.default.SyntaxKind.PrivateKeyword))||!1,args:u.parameters.map(T=>({name:l(T.name),type:g(T),isOptional:T.questionToken!==void 0}))}):i.default.isIndexSignatureDeclaration(u)&&(r=g(u));let f=P.get(n);f?(f.implementations=q(f.implementations||[],t),f.methods=q(f.methods||[],o,(u,T)=>u.name===T.name),f.properties=q(f.properties||[],s,(u,T)=>u.name===T.name),f.indexElementType=r,b(`Merge interface ${l(e.name)}`)):(f={name:n,implementations:t,methods:o,properties:s,indexElementType:r},P.set(n,f),b(`Define interface ${l(e.name)}`))}function be(e){let n=l(e.name);n&&(G.set(n,{name:n,members:e.members.map(t=>({name:l(t.name),initializer:l(t.initializer)}))}),b(`Define enum: ${l(e.name)}`))}function Ee(e){b(`Define typeAlias: ${l(e.name)}`),M.set(l(e.name),g(e))}function Se(e){let n=e.parent.parent;i.default.isVariableDeclaration(n)&&n.initializer&&i.default.isAsExpression(n.initializer)&&J.set(l(n.name),fe(n.initializer.expression))}function fe(e){return i.default.isArrayLiteralExpression(e)?Pe(e):i.default.isObjectLiteralExpression(e)?_e(e):i.default.isNumericLiteral(e)?"number":i.default.isStringLiteral(e)?"string":i.default.isBigIntLiteral(e)?"bigint":[i.default.SyntaxKind.TrueKeyword,i.default.SyntaxKind.FalseKeyword].includes(e.kind)?"boolean":N}function Pe(e){let n=[];return e.elements.forEach(t=>{if(i.default.isStringLiteral(t))return n.push(l(t))}),n.length===0?N:n.length===1?n[0]:{unionMembers:n}}function _e(e){let n=[];return e.properties.map(t=>{i.default.isPropertyAssignment(t)?n.push({name:l(t.name),type:fe(t.initializer)}):b(`unsupported property: ${t.name}`)}),{typeLiteralMembers:n}}function ce(e){$.add(e)}function g(e,n=!1){if(e.type&&!n)return S(e.type);if(!L)return console.error("TypeChecker not initialized!"),N;let t=L.getTypeAtLocation(e),s=L.typeToTypeNode(t,void 0,void 0);return s?S("type"in s?s.type:s):N}function S(e){let n={};if(e===void 0)return N;if(i.default.isUnionTypeNode(e))n.unionMembers=e.types.map(S);else if(i.default.isIntersectionTypeNode(e))n.intersectionMembers=e.types.map(S);else if(i.default.isLiteralTypeNode(e))n.literalValue=l(e.literal);else if(i.default.isTypeLiteralNode(e)){let t=[];e.members.forEach(s=>{i.default.isPropertySignature(s)?t.push({name:l(s.name),isOptional:s.questionToken!==void 0,type:g(s)}):i.default.isIndexSignatureDeclaration(s)?n.indexElementType=g(s):t.push({name:l(s.name)||"",isOptional:s.questionToken!==void 0,type:S()})}),n.typeLiteralMembers=t}else if(i.default.isArrayTypeNode(e))n.arrayElementType=S(e.elementType);else if(i.default.isFunctionTypeNode(e))n.isFunction=!0;else if(i.default.isTypeReferenceNode(e))if(ce(l(e.typeName)),e.typeArguments)n.generics=[l(e.typeName),...e.typeArguments.map(t=>S(t))];else return l(e.typeName);else{if(i.default.isIndexedAccessTypeNode(e))return g(e,!0);if(i.default.isThisTypeNode(e))return g(e);if(i.default.isParenthesizedTypeNode(e))return g(e);if(i.default.isConditionalTypeNode(e))return g(e);if(i.default.isTypeQueryNode(e))return g(e);if(i.default.isConstructorTypeNode(e))n.isConstructor=!0;else if(i.default.isTupleTypeNode(e))n.tupleMembers=e.elements.map(S);else{if(Object.keys(Y).includes(String(e.kind)))return Y[e.kind]||N;if(i.default.isOptionalTypeNode(e))Object.assign(n,g(e)),n.isOptionalInTuple=!0;else if(i.default.isNamedTupleMember(e))Object.assign(n,g(e));else return i.default.isTypeOperatorNode(e)&&e.operator===i.default.SyntaxKind.KeyOfKeyword,g(e,!0)}}return n}var q=(e,n,t)=>[...(e==null?void 0:e.filter(s=>!(n!=null&&n.some(o=>(t||(()=>o===s))(o,s)))))||[],...n||[]];function V(e){if(e!==void 0&&e!==N)return typeof e=="string"?$.has(e)?e:void 0:e}function Ne(e){var n,t;(n=e.methods)==null||n.forEach(pe),(t=e.properties)==null||t.forEach(le)}function Oe(e){var n,t;(n=e.methods)==null||n.forEach(pe),(t=e.properties)==null||t.forEach(le)}function le(e){e.type=V(e.type)}function pe(e){var n;(n=e.args)==null||n.forEach(t=>t.type=V(t.type)),e.returnType=V(e.returnType)}function l(e){if(!e)return e;if(e.end<0)return e.text;try{return i.default.isQualifiedName(e)?l(e.right):e.getText()}catch(n){return e.text}}function B(e){e&&Object.entries(e).forEach(n=>{let[t,s]=n;s instanceof Array&&s.length===0||s===!1||s===void 0?delete e[t]:s.constructor===Array?s.forEach(B):s.constructor===Object&&B(s)})}function Ke(e){for(let n of e.values())B(n)}function Ae(e,n){return n?(n=n instanceof Array?n:[n],n.some(t=>(t instanceof RegExp||(t=new RegExp(t.replace(/\./g,"\\.").replace(/\*/g,".*"))),e.match(t)))):!1}function ee(e,n=k.cwd()){return ne(e).replace(ne(n)+"/","")}function ne(e){let n=R.sep;return e.split(n).join("/")}function ue(e){return e instanceof Array?e:[e]}function b(e){I.OUTPUT_LOG&&console.log(e)}function W(e,n){let t=o=>{let r=e.replace(/\\/g,"/"),f=o.replace(/\\/g,"/");f=f.replace(/\*\*/g,"<<double_star>>");let m=f.replace(/([.+^${}()|[\]\\])/g,"\\$1").replace(/<<double_star>>/g,".*").replace(/\*/g,"[^/]*");return!o.startsWith("/")&&!o.startsWith("*")&&(m=".*"+m),m="^"+m+"$",new RegExp(m).test(r)};return(n instanceof Array?n:[n]).some(t)}function H(e){let{sourcePaths:n,exclude:t,forEnabledClassOnly:s,outputLog:o}=e;if(o&&(I.OUTPUT_LOG=!0),!n)throw new Error("need provide source paths for reflect loader");let{classDefinitions:r,interfaceDefinitions:f,enumDefinitions:h,typeAliasDefinitions:m}=F(n,t),D=[],x=[];function u(d){let c=r.get(d),y=[];return c?(c.superClassName&&y.push(c.superClassName),y.push(...c.implementations||[])):(c=f.get(d),c?y.push(...c.implementations||[]):(c=m.get(d),c&&y.push(...c.implementations||[]))),y.flatMap(a=>[a,...u(a)])||[]}function T(d,c){return u(d.name).includes(c)}function K(d){if(j.default.isClassDeclaration(d)&&d.name!==void 0){let c=d.name.text,y=r.get(c);if(!c||!y||s&&!T(y,"EnableReflect"))return;x.push(`Reflect.__classDef = Object.assign(Reflect.__classDef || {}, { ${c} })`);return}d.forEachChild(K)}function v(){let d=[];return r.forEach((c,y)=>{s&&!T(c,"EnableReflect")||d.push(`Reflect.__classes = Object.assign(Reflect.__classes || {}, { ${y}: ${JSON.stringify(c)} })`)}),f.forEach((c,y)=>{s&&!T(c,"EnableReflect")||d.push(`Reflect.__interfaces = Object.assign(Reflect.__interfaces || {}, { ${y}: ${JSON.stringify(c)} })`)}),h.forEach((c,y)=>{d.push(`Reflect.__enums = Object.assign(Reflect.__enums || {}, { ${y}: ${JSON.stringify(c)} })`)}),m.forEach((c,y)=>{d.push(`Reflect.__typeAliases = Object.assign(Reflect.__typeAliases || {}, { ${y}: ${JSON.stringify(c)} })`)}),d.join(`
2
+ `)}return{outputAllMetas:v,transform:(d,c)=>{let y=(typeof n=="string"?[n]:n).map(a=>a+"/**.ts");if(W(c,y))try{let a=j.default.createSourceFile(c,d,j.default.ScriptTarget.Latest,!1);return D.length=0,x.length=0,K(a),`${D.join(";")};${d};${x.join(";")}`}catch(a){return console.error(`[reflect-parser-plugin] Error processing ${c}:`,a),null}}}}var Me=process.cwd().replace(/\\/g,"/")+"/";function ke(e){let n=H(e);return{name:"reflect-parser-plugin",enforce:"pre",transform:(t,s)=>(s=s.replace(Me,""),s===e.entry?`${n.outputAllMetas()}
3
3
  ${t}`:n.transform(t,s))}}0&&(module.exports={DEBUG_CONFIG,parseSource,reflectLoader,reflectParserPlugin,setupReflectTypes,updateReflectModules});
@@ -1,3 +1,3 @@
1
- var $=(e,n,t)=>new Promise((s,p)=>{var r=m=>{try{D(t.next(m))}catch(w){p(w)}},o=m=>{try{D(t.throw(m))}catch(w){p(w)}},D=m=>m.done?s(m.value):Promise.resolve(m.value).then(r,o);D((t=t.apply(e,n)).next())});import B from"typescript";import i from"typescript";import*as E from"fs";import*as v from"process";import*as x from"path";import{pathToFileURL as ce}from"url";var z={OUTPUT_LOG:!1},P=new Map,_=new Map,j=new Map,A=new Map,q=new Map,C=new Set,J={[i.SyntaxKind.BooleanKeyword]:"boolean",[i.SyntaxKind.StringKeyword]:"string",[i.SyntaxKind.BigIntKeyword]:"bigint",[i.SyntaxKind.NumberKeyword]:"number",[i.SyntaxKind.SymbolKeyword]:"symbol",[i.SyntaxKind.VoidKeyword]:"void",[i.SyntaxKind.UndefinedKeyword]:"undefined",[i.SyntaxKind.UnknownKeyword]:"unknown",[i.SyntaxKind.AnyKeyword]:"any",[i.SyntaxKind.ObjectKeyword]:"object"},O="any",X=["string","number","boolean","bigint","symbol"],Y=["any","Promise","Date","Error","undefined","unknown","object","Map","Set"],Z=["Mappable","EnableReflect"];[...X,...Y,...Z].forEach(se);Z.forEach(e=>_.set(e,{name:e}));var k,Q=!1,h=Reflect;function Se(s,p){return $(this,arguments,function*(e,n,t=v.cwd()){if(t=x.resolve(t),h.__classes===void 0){e=oe(e),G(e,n),h.__classes={};for(let[r,o]of P)h.__classes[r]=o;h.__interfaces={};for(let[r,o]of _)h.__interfaces[r]=o;h.__typeAliases={};for(let[r,o]of A)h.__typeAliases[r]=o;h.__constTypes={};for(let[r,o]of q)h.__constTypes[r]=o;yield Promise.all(e.map(r=>ee(r,t)))}})}function ee(e,n){return $(this,null,function*(){if(!E.existsSync(e))return;if(E.statSync(e).isDirectory()){E.readdirSync(e).forEach(D=>{ee(x.join(e,D),n)});return}let s=x.join(n,e).replace(/\.ts$/,".js"),r=yield import(ce(s).href);h.__classDef={},Object.values(r).forEach(o=>{typeof o=="function"&&(h.__classDef[o.name]=o)})})}function G(e,n){if(e||(e=[v.cwd()]),e=oe(e),!Q){let t=ne(e,n),s=i.createProgram(t,{});k=s.getTypeChecker(),t=t.map(r=>W(r)),s.getSourceFiles().filter(r=>t.includes(W(r.fileName))).forEach(r=>{b(`parse file: ${r.fileName}`),te(r)});for(let r of C.keys())!P.has(r)&&!_.has(r)&&!j.has(r)&&!A.has(r)&&!X.includes(r)&&!Y.includes(r)&&(b(`remove unknown typeName: ${r}`),C.delete(r));Array.from(P.values()).forEach(Te),Array.from(_.values()).forEach(De),[P,_,A].forEach(we),Q=!0}return{classDefinitions:P,interfaceDefinitions:_,enumDefinitions:j,typeAliasDefinitions:A,constTypeDefinitions:q}}function ne(e,n){let t=[];return e.forEach(s=>{if(s=x.resolve(s),he(s,n)){b(`ignore excluded ${s}`);return}if(!E.existsSync(s)){console.error(`Path ${s} does not exist.`);return}if(E.statSync(s).isFile()){t.push(s);return}E.readdirSync(s).forEach(o=>t.push(...ne([x.join(s,o)],n)))}),t}function te(e){i.isClassDeclaration(e)?le(e):i.isInterfaceDeclaration(e)?pe(e):i.isEnumDeclaration(e)?ue(e):i.isTypeAliasDeclaration(e)?me(e):i.isConstTypeReference(e)?ye(e):e.forEachChild(te)}function le(e){var D,m,w,R,u,T,K,M,L,y,f,d;let n=c(e.name);if(!n)return;let t=c((w=(m=(D=e.heritageClauses)==null?void 0:D.find(a=>a.token===i.SyntaxKind.ExtendsKeyword))==null?void 0:m.types)==null?void 0:w[0].expression),s=(u=(R=e.heritageClauses)==null?void 0:R.find(a=>a.token===i.SyntaxKind.ImplementsKeyword))==null?void 0:u.types.map(a=>c(a.expression)),p=[],r=[];for(let a of e.members)if(i.isPropertyDeclaration(a))p.push({name:c(a.name),isOptional:a.questionToken!==void 0,type:g(a),isPrivate:(T=a.modifiers)==null?void 0:T.some(l=>l.kind===i.SyntaxKind.PrivateKeyword),isStatic:(K=a.modifiers)==null?void 0:K.some(l=>l.kind===i.SyntaxKind.StaticKeyword)});else if(i.isMethodDeclaration(a))r.push({name:c(a.name),returnType:g(a),isPrivate:(M=a.modifiers)==null?void 0:M.some(l=>l.kind===i.SyntaxKind.PrivateKeyword),isStatic:(L=a.modifiers)==null?void 0:L.some(l=>l.kind===i.SyntaxKind.StaticKeyword),isAsync:(y=a.modifiers)==null?void 0:y.some(l=>l.kind===i.SyntaxKind.AsyncKeyword),args:a.parameters.map(l=>({name:c(l.name),type:g(l),isOptional:l.questionToken!==void 0}))});else if(i.isGetAccessorDeclaration(a)){let l=p.find(N=>N.name===c(a.name));l||(l={name:c(a.name),isOptional:a.questionToken===void 0,type:g(a)},p.push(l)),l.accessor=l.accessor||{},l.accessor.getter={isPrivate:((f=a.modifiers)==null?void 0:f.some(N=>N.kind===i.SyntaxKind.PrivateKeyword))||!1},l.isPrivate=l.accessor.getter.isPrivate}else if(i.isSetAccessorDeclaration(a)){let l=p.find(N=>N.name===c(a.name));l||(l={name:c(a.name),isOptional:a.questionToken===void 0,type:g(a)},p.push(l)),l.accessor=l.accessor||{},l.accessor.setter={isPrivate:((d=a.modifiers)==null?void 0:d.some(N=>N.kind===i.SyntaxKind.PrivateKeyword))||!1}}let o={name:n,superClassName:t,implementations:s,properties:p,methods:r};b(`Define class: ${c(e.name)}`),P.set(n,o)}function pe(e){var D,m,w,R;let n=c(e.name);if(!n)return;let t=((m=(D=e.heritageClauses)==null?void 0:D.find(u=>u.token===i.SyntaxKind.ExtendsKeyword))==null?void 0:m.types.map(u=>c(u.expression)))||[],s=[],p=[],r;for(let u of e.members)i.isPropertySignature(u)?s.push({name:c(u.name),isOptional:u.questionToken!==void 0,type:g(u),isPrivate:((w=u.modifiers)==null?void 0:w.some(T=>T.kind===i.SyntaxKind.PrivateKeyword))||!1}):i.isMethodSignature(u)?p.push({name:u.name.text,returnType:g(u),isPrivate:((R=u.modifiers)==null?void 0:R.some(T=>T.kind===i.SyntaxKind.PrivateKeyword))||!1,args:u.parameters.map(T=>({name:c(T.name),type:g(T),isOptional:T.questionToken!==void 0}))}):i.isIndexSignatureDeclaration(u)&&(r=g(u));let o=_.get(n);o?(o.implementations=I(o.implementations||[],t),o.methods=I(o.methods||[],p,(u,T)=>u.name===T.name),o.properties=I(o.properties||[],s,(u,T)=>u.name===T.name),o.indexElementType=r,b(`Merge interface ${c(e.name)}`)):(o={name:n,implementations:t,methods:p,properties:s,indexElementType:r},_.set(n,o),b(`Define interface ${c(e.name)}`))}function ue(e){let n=c(e.name);n&&(j.set(n,{name:n,members:e.members.map(t=>({name:c(t.name),initializer:c(t.initializer)}))}),b(`Define enum: ${c(e.name)}`))}function me(e){b(`Define typeAlias: ${c(e.name)}`),A.set(c(e.name),g(e))}function ye(e){let n=e.parent.parent;i.isVariableDeclaration(n)&&n.initializer&&i.isAsExpression(n.initializer)&&q.set(c(n.name),ie(n.initializer.expression))}function ie(e){return i.isArrayLiteralExpression(e)?de(e):i.isObjectLiteralExpression(e)?ge(e):i.isNumericLiteral(e)?"number":i.isStringLiteral(e)?"string":i.isBigIntLiteral(e)?"bigint":[i.SyntaxKind.TrueKeyword,i.SyntaxKind.FalseKeyword].includes(e.kind)?"boolean":O}function de(e){let n=[];return e.elements.forEach(t=>{if(i.isStringLiteral(t))return n.push(c(t))}),n.length===0?O:n.length===1?n[0]:{unionMembers:n}}function ge(e){let n=[];return e.properties.map(t=>{i.isPropertyAssignment(t)?n.push({name:c(t.name),type:ie(t.initializer)}):b(`unsupported property: ${t.name}`)}),{typeLiteralMembers:n}}function se(e){C.add(e)}function g(e,n=!1){if(e.type&&!n)return S(e.type);if(!k)return console.error("TypeChecker not initialized!"),O;let t=k.getTypeAtLocation(e),s=k.typeToTypeNode(t,void 0,void 0);return s?S("type"in s?s.type:s):O}function S(e){let n={};if(e===void 0)return O;if(i.isUnionTypeNode(e))n.unionMembers=e.types.map(S);else if(i.isIntersectionTypeNode(e))n.intersectionMembers=e.types.map(S);else if(i.isLiteralTypeNode(e))n.literalValue=c(e.literal);else if(i.isTypeLiteralNode(e)){let t=[];e.members.forEach(s=>{i.isPropertySignature(s)?t.push({name:c(s.name),isOptional:s.questionToken!==void 0,type:g(s)}):i.isIndexSignatureDeclaration(s)?n.indexElementType=g(s):t.push({name:c(s.name)||"",isOptional:s.questionToken!==void 0,type:S()})}),n.typeLiteralMembers=t}else if(i.isArrayTypeNode(e))n.arrayElementType=S(e.elementType);else if(i.isFunctionTypeNode(e))n.isFunction=!0;else if(i.isTypeReferenceNode(e))if(se(c(e.typeName)),e.typeArguments)n.generics=[c(e.typeName),...e.typeArguments.map(t=>S(t))];else return c(e.typeName);else{if(i.isIndexedAccessTypeNode(e))return g(e,!0);if(i.isThisTypeNode(e))return g(e);if(i.isParenthesizedTypeNode(e))return g(e);if(i.isConditionalTypeNode(e))return g(e);if(i.isTypeQueryNode(e))return g(e);if(i.isConstructorTypeNode(e))n.isConstructor=!0;else if(i.isTupleTypeNode(e))n.tupleMembers=e.elements.map(S);else{if(Object.keys(J).includes(String(e.kind)))return J[e.kind]||O;if(i.isOptionalTypeNode(e))Object.assign(n,g(e)),n.isOptionalInTuple=!0;else if(i.isNamedTupleMember(e))Object.assign(n,g(e));else return i.isTypeOperatorNode(e)&&e.operator===i.SyntaxKind.KeyOfKeyword,g(e,!0)}}return n}var I=(e,n,t)=>[...(e==null?void 0:e.filter(s=>!(n!=null&&n.some(p=>(t||(()=>p===s))(p,s)))))||[],...n||[]];function F(e){if(e!==void 0&&e!==O)return typeof e=="string"?C.has(e)?e:void 0:e}function Te(e){var n,t;(n=e.methods)==null||n.forEach(ae),(t=e.properties)==null||t.forEach(re)}function De(e){var n,t;(n=e.methods)==null||n.forEach(ae),(t=e.properties)==null||t.forEach(re)}function re(e){e.type=F(e.type)}function ae(e){var n;(n=e.args)==null||n.forEach(t=>t.type=F(t.type)),e.returnType=F(e.returnType)}function c(e){if(!e)return e;if(e.end<0)return e.text;try{return i.isQualifiedName(e)?c(e.right):e.getText()}catch(n){return e.text}}function U(e){e&&Object.entries(e).forEach(n=>{let[t,s]=n;s instanceof Array&&s.length===0||s===!1||s===void 0?delete e[t]:s.constructor===Array?s.forEach(U):s.constructor===Object&&U(s)})}function we(e){for(let n of e.values())U(n)}function he(e,n){return n?(n=n instanceof Array?n:[n],n.some(t=>(t instanceof RegExp||(t=new RegExp(t.replace(/\./g,"\\.").replace(/\*/g,".*"))),e.match(t)))):!1}function W(e,n=v.cwd()){return H(e).replace(H(n)+"/","")}function H(e){let n=x.sep;return e.split(n).join("/")}function oe(e){return e instanceof Array?e:[e]}function b(e){z.OUTPUT_LOG&&console.log(e)}function V(e,n){let t=p=>{let r=e.replace(/\\/g,"/"),o=p.replace(/\\/g,"/");o=o.replace(/\*\*/g,"<<double_star>>");let m=o.replace(/([.+^${}()|[\]\\])/g,"\\$1").replace(/<<double_star>>/g,".*").replace(/\*/g,"[^/]*");return!p.startsWith("/")&&!p.startsWith("*")&&(m=".*"+m),m="^"+m+"$",new RegExp(m).test(r)};return(n instanceof Array?n:[n]).some(t)}function fe(e){let{sourcePaths:n,exclude:t,forEnabledClassOnly:s,outputLog:p}=e;if(p&&(z.OUTPUT_LOG=!0),!n)throw new Error("need provide source paths for reflect loader");let{classDefinitions:r,interfaceDefinitions:o,enumDefinitions:D,typeAliasDefinitions:m}=G(n,t),w=[],R=[];function u(y){let f=r.get(y),d=[];return f?(f.superClassName&&d.push(f.superClassName),d.push(...f.implementations||[])):(f=o.get(y),f?d.push(...f.implementations||[]):(f=m.get(y),f&&d.push(...f.implementations||[]))),d.flatMap(a=>[a,...u(a)])||[]}function T(y,f){return u(y.name).includes(f)}function K(y){if(B.isClassDeclaration(y)&&y.name!==void 0){let f=y.name.text,d=r.get(f);if(!f||!d||s&&!T(d,"EnableReflect"))return;R.push(`Reflect.__classDef = Object.assign(Reflect.__classDef || {}, { ${f} })`);return}y.forEachChild(K)}function M(){let y=[];return r.forEach((f,d)=>{s&&!T(f,"EnableReflect")||y.push(`Reflect.__classes = Object.assign(Reflect.__classes || {}, { ${d}: ${JSON.stringify(f)} })`)}),o.forEach((f,d)=>{s&&!T(f,"EnableReflect")||y.push(`Reflect.__interfaces = Object.assign(Reflect.__interfaces || {}, { ${d}: ${JSON.stringify(f)} })`)}),D.forEach((f,d)=>{y.push(`Reflect.__enums = Object.assign(Reflect.__enums || {}, { ${d}: ${JSON.stringify(f)} })`)}),m.forEach((f,d)=>{y.push(`Reflect.__typeAliases = Object.assign(Reflect.__typeAliases || {}, { ${d}: ${JSON.stringify(f)} })`)}),y.join(`
2
- `)}return{outputAllMetas:M,transform:(y,f)=>{let d=(typeof n=="string"?[n]:n).map(a=>a+"/**.ts");if(V(f,d))try{let a=B.createSourceFile(f,y,B.ScriptTarget.Latest,!1);return w.length=0,R.length=0,K(a),`${w.join(";")};${y};${R.join(";")}`}catch(a){return console.error(`[reflect-parser-plugin] Error processing ${f}:`,a),null}}}}var Re=process.cwd().replace(/\\/g,"/")+"/";function Ie(e){let n=fe(e);return{name:"reflect-parser-plugin",enforce:"pre",transform:(t,s)=>(s=s.replace(Re,""),s===e.entry?`${n.outputAllMetas()}
3
- ${t}`:n.transform(t,s))}}export{z as DEBUG_CONFIG,G as parseSource,fe as reflectLoader,Ie as reflectParserPlugin,Se as setupReflectTypes,ee as updateReflectModules};
1
+ var $=(e,n,i)=>new Promise((s,l)=>{var r=m=>{try{h(i.next(m))}catch(D){l(D)}},o=m=>{try{h(i.throw(m))}catch(D){l(D)}},h=m=>m.done?s(m.value):Promise.resolve(m.value).then(r,o);h((i=i.apply(e,n)).next())});import B from"typescript";import t from"typescript";import*as E from"fs";import*as M from"process";import*as R from"path";import{pathToFileURL as ce}from"url";var z={OUTPUT_LOG:!1},O=new Map,P=new Map,F=new Map,A=new Map,q=new Map,C=new Set,J={[t.SyntaxKind.BooleanKeyword]:"boolean",[t.SyntaxKind.StringKeyword]:"string",[t.SyntaxKind.BigIntKeyword]:"bigint",[t.SyntaxKind.NumberKeyword]:"number",[t.SyntaxKind.SymbolKeyword]:"symbol",[t.SyntaxKind.VoidKeyword]:"void",[t.SyntaxKind.UndefinedKeyword]:"undefined",[t.SyntaxKind.UnknownKeyword]:"unknown",[t.SyntaxKind.AnyKeyword]:"any",[t.SyntaxKind.ObjectKeyword]:"object"},N="any",X=["string","number","boolean","bigint","symbol"],Y=["any","Promise","Date","Error","undefined","unknown","object","Map","Set"],Z=["Mappable","EnableReflect"];[...X,...Y,...Z].forEach(se);Z.forEach(e=>P.set(e,{name:e}));var v,Q=!1,w=Reflect;function Se(e){return $(this,null,function*(){let{filePaths:n,exclude:i,sourceFolder:s,distFolder:l}=e;if(s=R.resolve(s||M.cwd()),l=R.resolve(l||M.cwd()),w.__classes===void 0){n=oe(n).map(r=>R.join(s,r)),G(n,i),w.__classes={};for(let[r,o]of O)w.__classes[r]=o;w.__interfaces={};for(let[r,o]of P)w.__interfaces[r]=o;w.__typeAliases={};for(let[r,o]of A)w.__typeAliases[r]=o;w.__constTypes={};for(let[r,o]of q)w.__constTypes[r]=o;yield Promise.all(n.map(r=>ee(r,l)))}})}function ee(e,n){return $(this,null,function*(){if(!E.existsSync(e))return;if(E.statSync(e).isDirectory()){E.readdirSync(e).forEach(h=>{ee(R.join(e,h),n)});return}let s=R.join(n,e).replace(/\.ts$/,".js"),r=yield import(ce(s).href);w.__classDef={},Object.values(r).forEach(o=>{typeof o=="function"&&(w.__classDef[o.name]=o)})})}function G(e,n){if(e||(e=[M.cwd()]),e=oe(e),!Q){let i=ne(e,n),s=t.createProgram(i,{});v=s.getTypeChecker(),i=i.map(r=>W(r)),s.getSourceFiles().filter(r=>i.includes(W(r.fileName))).forEach(r=>{b(`parse file: ${r.fileName}`),te(r)});for(let r of C.keys())!O.has(r)&&!P.has(r)&&!F.has(r)&&!A.has(r)&&!X.includes(r)&&!Y.includes(r)&&(b(`remove unknown typeName: ${r}`),C.delete(r));Array.from(O.values()).forEach(Te),Array.from(P.values()).forEach(he),[O,P,A].forEach(De),Q=!0}return{classDefinitions:O,interfaceDefinitions:P,enumDefinitions:F,typeAliasDefinitions:A,constTypeDefinitions:q}}function ne(e,n){let i=[];return e.forEach(s=>{if(s=R.resolve(s),we(s,n)){b(`ignore excluded ${s}`);return}if(!E.existsSync(s)){console.error(`Path ${s} does not exist.`);return}if(E.statSync(s).isFile()){i.push(s);return}E.readdirSync(s).forEach(o=>i.push(...ne([R.join(s,o)],n)))}),i}function te(e){t.isClassDeclaration(e)?le(e):t.isInterfaceDeclaration(e)?pe(e):t.isEnumDeclaration(e)?ue(e):t.isTypeAliasDeclaration(e)?me(e):t.isConstTypeReference(e)?de(e):e.forEachChild(te)}function le(e){var h,m,D,x,u,T,K,k,L,d,f,y;let n=c(e.name);if(!n)return;let i=c((D=(m=(h=e.heritageClauses)==null?void 0:h.find(a=>a.token===t.SyntaxKind.ExtendsKeyword))==null?void 0:m.types)==null?void 0:D[0].expression),s=(u=(x=e.heritageClauses)==null?void 0:x.find(a=>a.token===t.SyntaxKind.ImplementsKeyword))==null?void 0:u.types.map(a=>c(a.expression)),l=[],r=[];for(let a of e.members)if(t.isPropertyDeclaration(a))l.push({name:c(a.name),isOptional:a.questionToken!==void 0,type:g(a),isPrivate:(T=a.modifiers)==null?void 0:T.some(p=>p.kind===t.SyntaxKind.PrivateKeyword),isStatic:(K=a.modifiers)==null?void 0:K.some(p=>p.kind===t.SyntaxKind.StaticKeyword)});else if(t.isMethodDeclaration(a))r.push({name:c(a.name),returnType:g(a),isPrivate:(k=a.modifiers)==null?void 0:k.some(p=>p.kind===t.SyntaxKind.PrivateKeyword),isStatic:(L=a.modifiers)==null?void 0:L.some(p=>p.kind===t.SyntaxKind.StaticKeyword),isAsync:(d=a.modifiers)==null?void 0:d.some(p=>p.kind===t.SyntaxKind.AsyncKeyword),args:a.parameters.map(p=>({name:c(p.name),type:g(p),isOptional:p.questionToken!==void 0}))});else if(t.isGetAccessorDeclaration(a)){let p=l.find(_=>_.name===c(a.name));p||(p={name:c(a.name),isOptional:a.questionToken===void 0,type:g(a)},l.push(p)),p.accessor=p.accessor||{},p.accessor.getter={isPrivate:((f=a.modifiers)==null?void 0:f.some(_=>_.kind===t.SyntaxKind.PrivateKeyword))||!1},p.isPrivate=p.accessor.getter.isPrivate}else if(t.isSetAccessorDeclaration(a)){let p=l.find(_=>_.name===c(a.name));p||(p={name:c(a.name),isOptional:a.questionToken===void 0,type:g(a)},l.push(p)),p.accessor=p.accessor||{},p.accessor.setter={isPrivate:((y=a.modifiers)==null?void 0:y.some(_=>_.kind===t.SyntaxKind.PrivateKeyword))||!1}}let o={name:n,superClassName:i,implementations:s,properties:l,methods:r};b(`Define class: ${c(e.name)}`),O.set(n,o)}function pe(e){var h,m,D,x;let n=c(e.name);if(!n)return;let i=((m=(h=e.heritageClauses)==null?void 0:h.find(u=>u.token===t.SyntaxKind.ExtendsKeyword))==null?void 0:m.types.map(u=>c(u.expression)))||[],s=[],l=[],r;for(let u of e.members)t.isPropertySignature(u)?s.push({name:c(u.name),isOptional:u.questionToken!==void 0,type:g(u),isPrivate:((D=u.modifiers)==null?void 0:D.some(T=>T.kind===t.SyntaxKind.PrivateKeyword))||!1}):t.isMethodSignature(u)?l.push({name:u.name.text,returnType:g(u),isPrivate:((x=u.modifiers)==null?void 0:x.some(T=>T.kind===t.SyntaxKind.PrivateKeyword))||!1,args:u.parameters.map(T=>({name:c(T.name),type:g(T),isOptional:T.questionToken!==void 0}))}):t.isIndexSignatureDeclaration(u)&&(r=g(u));let o=P.get(n);o?(o.implementations=I(o.implementations||[],i),o.methods=I(o.methods||[],l,(u,T)=>u.name===T.name),o.properties=I(o.properties||[],s,(u,T)=>u.name===T.name),o.indexElementType=r,b(`Merge interface ${c(e.name)}`)):(o={name:n,implementations:i,methods:l,properties:s,indexElementType:r},P.set(n,o),b(`Define interface ${c(e.name)}`))}function ue(e){let n=c(e.name);n&&(F.set(n,{name:n,members:e.members.map(i=>({name:c(i.name),initializer:c(i.initializer)}))}),b(`Define enum: ${c(e.name)}`))}function me(e){b(`Define typeAlias: ${c(e.name)}`),A.set(c(e.name),g(e))}function de(e){let n=e.parent.parent;t.isVariableDeclaration(n)&&n.initializer&&t.isAsExpression(n.initializer)&&q.set(c(n.name),ie(n.initializer.expression))}function ie(e){return t.isArrayLiteralExpression(e)?ye(e):t.isObjectLiteralExpression(e)?ge(e):t.isNumericLiteral(e)?"number":t.isStringLiteral(e)?"string":t.isBigIntLiteral(e)?"bigint":[t.SyntaxKind.TrueKeyword,t.SyntaxKind.FalseKeyword].includes(e.kind)?"boolean":N}function ye(e){let n=[];return e.elements.forEach(i=>{if(t.isStringLiteral(i))return n.push(c(i))}),n.length===0?N:n.length===1?n[0]:{unionMembers:n}}function ge(e){let n=[];return e.properties.map(i=>{t.isPropertyAssignment(i)?n.push({name:c(i.name),type:ie(i.initializer)}):b(`unsupported property: ${i.name}`)}),{typeLiteralMembers:n}}function se(e){C.add(e)}function g(e,n=!1){if(e.type&&!n)return S(e.type);if(!v)return console.error("TypeChecker not initialized!"),N;let i=v.getTypeAtLocation(e),s=v.typeToTypeNode(i,void 0,void 0);return s?S("type"in s?s.type:s):N}function S(e){let n={};if(e===void 0)return N;if(t.isUnionTypeNode(e))n.unionMembers=e.types.map(S);else if(t.isIntersectionTypeNode(e))n.intersectionMembers=e.types.map(S);else if(t.isLiteralTypeNode(e))n.literalValue=c(e.literal);else if(t.isTypeLiteralNode(e)){let i=[];e.members.forEach(s=>{t.isPropertySignature(s)?i.push({name:c(s.name),isOptional:s.questionToken!==void 0,type:g(s)}):t.isIndexSignatureDeclaration(s)?n.indexElementType=g(s):i.push({name:c(s.name)||"",isOptional:s.questionToken!==void 0,type:S()})}),n.typeLiteralMembers=i}else if(t.isArrayTypeNode(e))n.arrayElementType=S(e.elementType);else if(t.isFunctionTypeNode(e))n.isFunction=!0;else if(t.isTypeReferenceNode(e))if(se(c(e.typeName)),e.typeArguments)n.generics=[c(e.typeName),...e.typeArguments.map(i=>S(i))];else return c(e.typeName);else{if(t.isIndexedAccessTypeNode(e))return g(e,!0);if(t.isThisTypeNode(e))return g(e);if(t.isParenthesizedTypeNode(e))return g(e);if(t.isConditionalTypeNode(e))return g(e);if(t.isTypeQueryNode(e))return g(e);if(t.isConstructorTypeNode(e))n.isConstructor=!0;else if(t.isTupleTypeNode(e))n.tupleMembers=e.elements.map(S);else{if(Object.keys(J).includes(String(e.kind)))return J[e.kind]||N;if(t.isOptionalTypeNode(e))Object.assign(n,g(e)),n.isOptionalInTuple=!0;else if(t.isNamedTupleMember(e))Object.assign(n,g(e));else return t.isTypeOperatorNode(e)&&e.operator===t.SyntaxKind.KeyOfKeyword,g(e,!0)}}return n}var I=(e,n,i)=>[...(e==null?void 0:e.filter(s=>!(n!=null&&n.some(l=>(i||(()=>l===s))(l,s)))))||[],...n||[]];function j(e){if(e!==void 0&&e!==N)return typeof e=="string"?C.has(e)?e:void 0:e}function Te(e){var n,i;(n=e.methods)==null||n.forEach(ae),(i=e.properties)==null||i.forEach(re)}function he(e){var n,i;(n=e.methods)==null||n.forEach(ae),(i=e.properties)==null||i.forEach(re)}function re(e){e.type=j(e.type)}function ae(e){var n;(n=e.args)==null||n.forEach(i=>i.type=j(i.type)),e.returnType=j(e.returnType)}function c(e){if(!e)return e;if(e.end<0)return e.text;try{return t.isQualifiedName(e)?c(e.right):e.getText()}catch(n){return e.text}}function U(e){e&&Object.entries(e).forEach(n=>{let[i,s]=n;s instanceof Array&&s.length===0||s===!1||s===void 0?delete e[i]:s.constructor===Array?s.forEach(U):s.constructor===Object&&U(s)})}function De(e){for(let n of e.values())U(n)}function we(e,n){return n?(n=n instanceof Array?n:[n],n.some(i=>(i instanceof RegExp||(i=new RegExp(i.replace(/\./g,"\\.").replace(/\*/g,".*"))),e.match(i)))):!1}function W(e,n=M.cwd()){return H(e).replace(H(n)+"/","")}function H(e){let n=R.sep;return e.split(n).join("/")}function oe(e){return e instanceof Array?e:[e]}function b(e){z.OUTPUT_LOG&&console.log(e)}function V(e,n){let i=l=>{let r=e.replace(/\\/g,"/"),o=l.replace(/\\/g,"/");o=o.replace(/\*\*/g,"<<double_star>>");let m=o.replace(/([.+^${}()|[\]\\])/g,"\\$1").replace(/<<double_star>>/g,".*").replace(/\*/g,"[^/]*");return!l.startsWith("/")&&!l.startsWith("*")&&(m=".*"+m),m="^"+m+"$",new RegExp(m).test(r)};return(n instanceof Array?n:[n]).some(i)}function fe(e){let{sourcePaths:n,exclude:i,forEnabledClassOnly:s,outputLog:l}=e;if(l&&(z.OUTPUT_LOG=!0),!n)throw new Error("need provide source paths for reflect loader");let{classDefinitions:r,interfaceDefinitions:o,enumDefinitions:h,typeAliasDefinitions:m}=G(n,i),D=[],x=[];function u(d){let f=r.get(d),y=[];return f?(f.superClassName&&y.push(f.superClassName),y.push(...f.implementations||[])):(f=o.get(d),f?y.push(...f.implementations||[]):(f=m.get(d),f&&y.push(...f.implementations||[]))),y.flatMap(a=>[a,...u(a)])||[]}function T(d,f){return u(d.name).includes(f)}function K(d){if(B.isClassDeclaration(d)&&d.name!==void 0){let f=d.name.text,y=r.get(f);if(!f||!y||s&&!T(y,"EnableReflect"))return;x.push(`Reflect.__classDef = Object.assign(Reflect.__classDef || {}, { ${f} })`);return}d.forEachChild(K)}function k(){let d=[];return r.forEach((f,y)=>{s&&!T(f,"EnableReflect")||d.push(`Reflect.__classes = Object.assign(Reflect.__classes || {}, { ${y}: ${JSON.stringify(f)} })`)}),o.forEach((f,y)=>{s&&!T(f,"EnableReflect")||d.push(`Reflect.__interfaces = Object.assign(Reflect.__interfaces || {}, { ${y}: ${JSON.stringify(f)} })`)}),h.forEach((f,y)=>{d.push(`Reflect.__enums = Object.assign(Reflect.__enums || {}, { ${y}: ${JSON.stringify(f)} })`)}),m.forEach((f,y)=>{d.push(`Reflect.__typeAliases = Object.assign(Reflect.__typeAliases || {}, { ${y}: ${JSON.stringify(f)} })`)}),d.join(`
2
+ `)}return{outputAllMetas:k,transform:(d,f)=>{let y=(typeof n=="string"?[n]:n).map(a=>a+"/**.ts");if(V(f,y))try{let a=B.createSourceFile(f,d,B.ScriptTarget.Latest,!1);return D.length=0,x.length=0,K(a),`${D.join(";")};${d};${x.join(";")}`}catch(a){return console.error(`[reflect-parser-plugin] Error processing ${f}:`,a),null}}}}var Re=process.cwd().replace(/\\/g,"/")+"/";function Ie(e){let n=fe(e);return{name:"reflect-parser-plugin",enforce:"pre",transform:(i,s)=>(s=s.replace(Re,""),s===e.entry?`${n.outputAllMetas()}
3
+ ${i}`:n.transform(i,s))}}export{z as DEBUG_CONFIG,G as parseSource,fe as reflectLoader,Ie as reflectParserPlugin,Se as setupReflectTypes,ee as updateReflectModules};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-ref-kit",
3
- "version": "1.0.15",
3
+ "version": "1.0.17",
4
4
  "description": "Type reflection and validation library for TypeScript",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -14,36 +14,32 @@
14
14
  ],
15
15
  "exports": {
16
16
  ".": {
17
- "types": "./dist/types/index.d.ts",
17
+ "types": "./types/index.d.ts",
18
18
  "import": "./dist/esm/index.js",
19
19
  "require": "./dist/cjs/index.cjs"
20
20
  },
21
21
  "./parser": {
22
- "types": "./dist/types/parser/index.d.ts",
22
+ "types": "./types/parser/index.d.ts",
23
23
  "import": "./dist/esm/parser/index.js",
24
24
  "require": "./dist/cjs/parser/index.cjs"
25
25
  }
26
26
  },
27
27
  "typesVersions": {
28
28
  "*": {
29
- "parser": [
30
- "types/parser/index.d.ts"
31
- ],
32
- "*": [
33
- "types/index.d.ts"
34
- ]
29
+ "parser": ["types/parser/index.d.ts"],
30
+ "*": ["types/index.d.ts"]
35
31
  }
36
32
  },
37
33
  "scripts": {
38
- "clean": "rimraf dist types",
39
- "build": "npm run clean && node esbuild.config.js && node esbuild.parser.config.js && tsc --emitDeclarationOnly && api-extractor run --local --config api-extractor.json && api-extractor run --local --config api-extractor.parser.json && rimraf types"
34
+ "build-types": "tsc --emitDeclarationOnly --outDir types",
35
+ "clean": "rm -rf dist types",
36
+ "build": "npm run clean && node esbuild.config.js && node esbuild.parser.config.js && tsc --emitDeclarationOnly --outDir types"
40
37
  },
41
38
  "dependencies": {
42
39
  "reflect-metadata": "^0.2.2",
43
40
  "tslib": "^2.8.1"
44
41
  },
45
42
  "devDependencies": {
46
- "@microsoft/api-extractor": "^7.52.11",
47
43
  "@types/node": "^24.2.0",
48
44
  "esbuild": "^0.25.9",
49
45
  "rimraf": "^6.0.1",
@@ -0,0 +1,2 @@
1
+ export * from './reflect-types';
2
+ export * from './reflect-json';
@@ -0,0 +1,3 @@
1
+ export * from './reflect-loader';
2
+ export * from './reflect-parser-plugin';
3
+ export * from './reflect-parser';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 检查文件路径是否匹配 glob 规则
3
+ * @param filePath 要检查的文件路径(绝对或相对路径)
4
+ * @param pattern glob 规则,如 `/src/**\/.ts`
5
+ * @returns 是否匹配
6
+ */
7
+ export default function isPathMatch(filePath: string, pattern: string | string[]): boolean;
@@ -0,0 +1,10 @@
1
+ export interface ReflectLoaderOptions {
2
+ sourcePaths: string | string[];
3
+ exclude?: string | RegExp | (string | RegExp)[];
4
+ forEnabledClassOnly?: boolean;
5
+ outputLog?: boolean;
6
+ }
7
+ export declare function reflectLoader(options: ReflectLoaderOptions): {
8
+ outputAllMetas: () => string;
9
+ transform: (sourceCode: string, sourceFileName: string) => string;
10
+ };
@@ -0,0 +1,7 @@
1
+ import { type Plugin } from 'vite';
2
+ import { ReflectLoaderOptions } from './reflect-loader';
3
+ interface Options extends ReflectLoaderOptions {
4
+ entry: string;
5
+ }
6
+ export declare function reflectParserPlugin(options: Options): Plugin;
7
+ export {};
@@ -1,110 +1,82 @@
1
- import { Plugin as Plugin_2 } from 'vite';
2
-
3
- declare type Any = any;
4
-
5
- export declare const DEBUG_CONFIG: {
6
- OUTPUT_LOG: boolean;
7
- };
8
-
9
- declare type FilePathRule = string | RegExp | (string | RegExp)[];
10
-
11
- declare interface Options extends ReflectLoaderOptions {
12
- entry: string;
13
- }
14
-
15
- export declare function parseSource(filePaths?: string | string[], exclude?: FilePathRule): {
16
- classDefinitions: Map<string, RawClassDefinition>;
17
- interfaceDefinitions: Map<string, RawInterfaceDefinition>;
18
- enumDefinitions: Map<string, RawEnumDefinition>;
19
- typeAliasDefinitions: Map<string, RawTypeDef>;
20
- constTypeDefinitions: Map<string, RawTypeDef>;
21
- };
22
-
23
- export declare interface RawClassDefinition {
24
- name: string;
25
- superClassName?: string;
26
- implementations?: string[];
27
- methods?: RawMethodDefinition[];
28
- properties?: RawPropertyDefinition[];
29
- }
30
-
31
- export declare interface RawEnumDefinition {
32
- name: string;
33
- members: {
34
- name: string;
35
- initializer: string | undefined;
36
- }[];
37
- }
38
-
39
- export declare interface RawInterfaceDefinition {
40
- name: string;
41
- implementations?: string[];
42
- methods?: RawMethodDefinition[];
43
- properties?: RawPropertyDefinition[];
44
- indexElementType?: RawTypeDef;
45
- }
46
-
47
- export declare interface RawMethodDefinition {
48
- name: string;
49
- isPrivate?: boolean;
50
- isStatic?: boolean;
51
- isAsync?: boolean;
52
- returnType?: RawTypeDef;
53
- args?: {
54
- name: string;
55
- type?: RawTypeDef;
56
- isOptional: boolean;
57
- }[];
58
- }
59
-
60
- export declare interface RawPropertyDefinition {
61
- name: string;
62
- isOptional?: boolean;
63
- isPrivate?: boolean;
64
- isStatic?: boolean;
65
- type?: RawTypeDef;
66
- accessor?: {
67
- getter?: {
68
- isPrivate: boolean;
69
- };
70
- setter?: {
71
- isPrivate: boolean;
72
- };
73
- };
74
- }
75
-
76
- declare type RawTypeDef = string | RawTypeDefinition;
77
-
78
- export declare interface RawTypeDefinition {
79
- arrayElementType?: RawTypeDef;
80
- indexElementType?: RawTypeDef;
81
- literalValue?: Any;
82
- typeLiteralMembers?: RawPropertyDefinition[];
83
- unionMembers?: RawTypeDef[];
84
- intersectionMembers?: RawTypeDef[];
85
- generics?: RawTypeDef[];
86
- isFunction?: boolean;
87
- tupleMembers?: RawTypeDef[];
88
- isOptionalInTuple?: boolean;
89
- isConstructor?: boolean;
90
- }
91
-
92
- export declare function reflectLoader(options: ReflectLoaderOptions): {
93
- outputAllMetas: () => string;
94
- transform: (sourceCode: string, sourceFileName: string) => string;
95
- };
96
-
97
- export declare interface ReflectLoaderOptions {
98
- sourcePaths: string | string[];
99
- exclude?: string | RegExp | (string | RegExp)[];
100
- forEnabledClassOnly?: boolean;
101
- outputLog?: boolean;
102
- }
103
-
104
- export declare function reflectParserPlugin(options: Options): Plugin_2;
105
-
106
- export declare function setupReflectTypes(filePaths: string | string[], exclude?: FilePathRule, distFolder?: string): Promise<void>;
107
-
108
- export declare function updateReflectModules(filePath: string, distFolder: string): Promise<void>;
109
-
110
- export { }
1
+ export declare const DEBUG_CONFIG: {
2
+ OUTPUT_LOG: boolean;
3
+ };
4
+ type Any = any;
5
+ export interface RawClassDefinition {
6
+ name: string;
7
+ superClassName?: string;
8
+ implementations?: string[];
9
+ methods?: RawMethodDefinition[];
10
+ properties?: RawPropertyDefinition[];
11
+ }
12
+ export interface RawInterfaceDefinition {
13
+ name: string;
14
+ implementations?: string[];
15
+ methods?: RawMethodDefinition[];
16
+ properties?: RawPropertyDefinition[];
17
+ indexElementType?: RawTypeDef;
18
+ }
19
+ export interface RawEnumDefinition {
20
+ name: string;
21
+ members: {
22
+ name: string;
23
+ initializer: string | undefined;
24
+ }[];
25
+ }
26
+ export interface RawMethodDefinition {
27
+ name: string;
28
+ isPrivate?: boolean;
29
+ isStatic?: boolean;
30
+ isAsync?: boolean;
31
+ returnType?: RawTypeDef;
32
+ args?: {
33
+ name: string;
34
+ type?: RawTypeDef;
35
+ isOptional: boolean;
36
+ }[];
37
+ }
38
+ export interface RawPropertyDefinition {
39
+ name: string;
40
+ isOptional?: boolean;
41
+ isPrivate?: boolean;
42
+ isStatic?: boolean;
43
+ type?: RawTypeDef;
44
+ accessor?: {
45
+ getter?: {
46
+ isPrivate: boolean;
47
+ };
48
+ setter?: {
49
+ isPrivate: boolean;
50
+ };
51
+ };
52
+ }
53
+ type RawTypeDef = string | RawTypeDefinition;
54
+ export interface RawTypeDefinition {
55
+ arrayElementType?: RawTypeDef;
56
+ indexElementType?: RawTypeDef;
57
+ literalValue?: Any;
58
+ typeLiteralMembers?: RawPropertyDefinition[];
59
+ unionMembers?: RawTypeDef[];
60
+ intersectionMembers?: RawTypeDef[];
61
+ generics?: RawTypeDef[];
62
+ isFunction?: boolean;
63
+ tupleMembers?: RawTypeDef[];
64
+ isOptionalInTuple?: boolean;
65
+ isConstructor?: boolean;
66
+ }
67
+ type FilePathRule = string | RegExp | (string | RegExp)[];
68
+ export declare function setupReflectTypes(cfg: {
69
+ filePaths: string | string[];
70
+ exclude?: FilePathRule;
71
+ sourceFolder?: string;
72
+ distFolder?: string;
73
+ }): Promise<void>;
74
+ export declare function updateReflectModules(filePath: string, distFolder: string): Promise<void>;
75
+ export declare function parseSource(filePaths?: string | string[], exclude?: FilePathRule): {
76
+ classDefinitions: Map<string, RawClassDefinition>;
77
+ interfaceDefinitions: Map<string, RawInterfaceDefinition>;
78
+ enumDefinitions: Map<string, RawEnumDefinition>;
79
+ typeAliasDefinitions: Map<string, RawTypeDef>;
80
+ constTypeDefinitions: Map<string, RawTypeDef>;
81
+ };
82
+ export {};
@@ -0,0 +1,13 @@
1
+ import { type EnableReflect } from '../reflect-types';
2
+ import type { Class, JsonValue } from './types';
3
+ export interface Mappable extends EnableReflect {
4
+ mapping(map: Mapping<Mappable>): void;
5
+ }
6
+ export type Mapping<T extends Mappable> = {
7
+ [propName in keyof T]-?: (fieldName?: string | symbol, transform?: {
8
+ fromJSON?: (jsonValue: JsonValue) => Mappable;
9
+ toJSON?: (obj: Mappable) => JsonValue;
10
+ }) => void;
11
+ };
12
+ export declare function registerMappable<T extends Mappable>(mappableClass: Class<T>): void;
13
+ export declare function mapAllProperties<T extends Mappable>(target: T, map: Mapping<T>): void;
@@ -0,0 +1,18 @@
1
+ import { ReflectPropertyKey } from './reflect-extension';
2
+ import type { Any } from './types';
3
+ export declare function defineDecoratedProperty(metaKey: symbol): PropertyDecorator;
4
+ export declare function callDecoratedMethod<Self extends object>(self: Self, metaKey: symbol, ...args: Any[]): Any | undefined;
5
+ export declare function hasDecoratedMethod<Self extends object>(self: Self, metaKey: symbol): boolean;
6
+ export declare function getDecoratedProperty(target: object, metaKey: symbol): ReflectPropertyKey | undefined;
7
+ export declare function getDecoratedPropertyValue<V>(target: object, metaKey: symbol): V | undefined;
8
+ export declare const PropertyWrapper: IPropertyWrapper;
9
+ type IPropertyWrapper = {
10
+ getField: (owner: object, property: ReflectPropertyKey, fieldSymbol: symbol) => Any;
11
+ setField: (owner: object, property: ReflectPropertyKey, newValue: Any, fieldSymbol: symbol) => void;
12
+ } & (<T>({ getter, setter, fieldSymbol }: {
13
+ getter?: (self: object, property: ReflectPropertyKey) => T;
14
+ setter?: (self: object, newValue: T, property: ReflectPropertyKey) => void;
15
+ fieldSymbol: symbol;
16
+ }) => PropertyDecorator);
17
+ export declare function Lazy(creator: (self: object, property: ReflectPropertyKey) => Any): PropertyDecorator;
18
+ export {};
@@ -0,0 +1,6 @@
1
+ export * from './Mappable';
2
+ export * from './decorate';
3
+ export * from './json-translation';
4
+ export * from './reflect-extension';
5
+ export * from './types';
6
+ export * from './utils';
@@ -0,0 +1,38 @@
1
+ import 'reflect-metadata';
2
+ import { Any, AnyObject, Class, ClassOrInstance, JsonObject, JsonValue } from './types';
3
+ type FromJSON<T> = (jsonValue: JsonValue) => T;
4
+ type ToJSON<T> = (obj: T) => JsonValue;
5
+ type SerializedOptions<T> = {
6
+ name?: string;
7
+ class?: Class<T>;
8
+ fromJSON?: FromJSON<T>;
9
+ toJSON?: ToJSON<T>;
10
+ };
11
+ export declare function setDefaultIgnored(clazz: Class<Any>, defaultIgnored: boolean): void;
12
+ export declare function registerSerializedProperty(target: AnyObject, propName: string, options: SerializedOptions<Any>): void;
13
+ export declare const SerializedClass: PropertyDecorator;
14
+ export declare function Serialized<T extends object>(options?: SerializedOptions<T>): PropertyDecorator;
15
+ export declare function SerializedName(serializedName: string): PropertyDecorator;
16
+ export declare const IgnoreSerialization: PropertyDecorator;
17
+ /**
18
+ * serialize an object to json string
19
+ */
20
+ export declare function serialize<T>(value: T): string;
21
+ export declare function serializeTo<T>(value: T): JsonValue;
22
+ /**
23
+ * convert an object to data object
24
+ */
25
+ export declare function serializeToData<T extends object>(object: T): JsonObject | JsonObject[];
26
+ export declare function deserialize<T>(json: string | JsonValue, constructorOrTarget?: ClassOrInstance<T>): T;
27
+ export declare function deserializeArray<T>(json: string | JsonValue[], clazz?: Class<T>): T[];
28
+ export declare function deserializeFrom<T extends AnyObject>(data: JsonObject, target: T): void;
29
+ export declare function getSerializeSettings(clazz: Class<Any>): any;
30
+ export interface JsonValueTransform<T> {
31
+ fromJson: FromJSON<T>;
32
+ toJson: ToJSON<T>;
33
+ }
34
+ export declare function registerTransform<T>(clazz: Class<T>, transform: JsonValueTransform<T>): void;
35
+ export declare const itSelf: (some: Any) => any;
36
+ export declare const done: () => any;
37
+ export declare const AfterSerialized: PropertyDecorator;
38
+ export {};
@@ -0,0 +1,13 @@
1
+ import 'reflect-metadata';
2
+ import { Any, AnyConstructorFunction, AnyObject, Optional } from './types';
3
+ export type ReflectPropertyKey = string | symbol;
4
+ export type ReflectType = StringConstructor | NumberConstructor | BooleanConstructor | ObjectConstructor | ArrayConstructor | FunctionConstructor | AnyConstructorFunction;
5
+ declare global {
6
+ namespace Reflect {
7
+ function getDesignType<T extends AnyObject>(target: T, property: keyof T | ReflectPropertyKey): Optional<ReflectType>;
8
+ function getReturnType<T extends AnyObject>(target: T, property: keyof T | ReflectPropertyKey): Optional<ReflectType>;
9
+ function getParamTypes<T extends AnyObject>(target: T, property: keyof T | ReflectPropertyKey): Optional<ReflectType[]>;
10
+ function addMetadataList<T extends object>(key: symbol, value: Any, target: T): void;
11
+ function addMetadataList<T extends object>(key: symbol, value: Any, target: T, property: ReflectPropertyKey): void;
12
+ }
13
+ }
@@ -0,0 +1,15 @@
1
+ export type Any = any;
2
+ export type AnyFunction = (...args: Any[]) => Any;
3
+ export type AnyConstructorFunction = new (...args: Any[]) => Any;
4
+ export type Class<T> = new (...args: Any[]) => T;
5
+ export type ClassOrInstance<T> = T | Class<T>;
6
+ export type Dictionary<T> = {
7
+ [key: string | symbol]: T;
8
+ };
9
+ export type AnyObject = Dictionary<Any>;
10
+ export type Optional<T> = T | undefined;
11
+ export type Nullable<T> = T | null;
12
+ export type JsonValue = string | number | boolean | null | JsonObject | JsonObject[];
13
+ export type JsonObject = {
14
+ [propName: string]: JsonValue;
15
+ };
@@ -0,0 +1,9 @@
1
+ import { Any, Class } from "./types";
2
+ export declare function asBoolean(value: unknown): boolean;
3
+ export declare function asString(v: unknown): string;
4
+ export declare function asNumber(v: unknown): number;
5
+ export declare function setAnyValue<T>(target: Any, field: string | number | symbol, value: T): void;
6
+ export declare function getAnyValue<T>(target: Any, field: string | number | symbol): T | undefined;
7
+ export declare function getOrSetValue<T>(target: Any, field: string | number | symbol, defaultWith: () => T): T;
8
+ export declare function isDictionary(value: Any): boolean;
9
+ export declare function createNewInstance<T>(clazz: Class<T>): any;
@@ -0,0 +1,28 @@
1
+ import { RawClassDefinition, TypeDefinition } from './index';
2
+ import { InterfaceDefinition, MethodDefinition, PropertyDefinition } from './index';
3
+ import type { AnyConstructorFunction, Dictionary } from './package';
4
+ type ImplementationOfClass = InterfaceDefinition | TypeDefinition;
5
+ export declare class ClassDefinition {
6
+ readonly name: string;
7
+ readonly superClassName: string;
8
+ readonly superClass: ClassDefinition | undefined;
9
+ readonly methods: MethodDefinition[];
10
+ readonly properties: PropertyDefinition[];
11
+ readonly jsClass: AnyConstructorFunction;
12
+ private readonly _implementationNames;
13
+ private readonly _implementations?;
14
+ private _allImplementations?;
15
+ constructor(def: RawClassDefinition & {
16
+ jsClass: AnyConstructorFunction;
17
+ });
18
+ get allMethods(): Dictionary<MethodDefinition>;
19
+ get allProperties(): Dictionary<PropertyDefinition>;
20
+ get implementations(): ImplementationOfClass[];
21
+ get allImplementations(): ImplementationOfClass[];
22
+ getProperty(propName: string): PropertyDefinition | undefined;
23
+ get type(): TypeDefinition;
24
+ isSubClassOf(typeName: string): boolean;
25
+ isSuperClassOf(typeName: string): boolean;
26
+ toString(): string;
27
+ }
28
+ export {};
@@ -0,0 +1,8 @@
1
+ import type { RawEnumDefinition, TypeDefinition } from './reflect-definitions';
2
+ export declare class EnumDefinition {
3
+ readonly name: string;
4
+ readonly members: Map<string, TypeDefinition>;
5
+ constructor(def: RawEnumDefinition);
6
+ get type(): TypeDefinition;
7
+ get names(): string[];
8
+ }
@@ -0,0 +1,18 @@
1
+ import { ClassDefinition, RawInterfaceDefinition, TypeDefinition } from './index';
2
+ import { MethodDefinition, PropertyDefinition } from './index';
3
+ type ImplementationOfInterface = InterfaceDefinition | ClassDefinition | TypeDefinition;
4
+ export declare class InterfaceDefinition {
5
+ readonly name: string;
6
+ readonly methods: MethodDefinition[];
7
+ readonly properties: PropertyDefinition[];
8
+ private readonly _implementationNames;
9
+ private _implementations?;
10
+ private _allImplementations?;
11
+ constructor(def: RawInterfaceDefinition);
12
+ get implementations(): ImplementationOfInterface[];
13
+ get allImplementations(): ImplementationOfInterface[];
14
+ get type(): TypeDefinition;
15
+ toString(): string;
16
+ buildBaseObject(): {};
17
+ }
18
+ export {};
@@ -0,0 +1,15 @@
1
+ import { type RawMethodDefinition, type TypeDefinition } from './index';
2
+ export declare class MethodDefinition {
3
+ name: string;
4
+ isPrivate: boolean;
5
+ isStatic: boolean;
6
+ isAsync: boolean;
7
+ returnType: TypeDefinition;
8
+ args: {
9
+ name: string;
10
+ type?: TypeDefinition;
11
+ isOptional: boolean;
12
+ }[];
13
+ constructor(def: RawMethodDefinition);
14
+ }
15
+ export declare function fillMethod(rawMethod: RawMethodDefinition): MethodDefinition;