@crossdelta/platform-sdk 0.18.5 → 0.18.6

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 (2) hide show
  1. package/bin/cli.js +3 -2
  2. package/package.json +1 -1
package/bin/cli.js CHANGED
@@ -76,9 +76,10 @@ export default handleEvent(${n}, async (data: ${o}) => {
76
76
  `+r+`
77
77
  `,"utf-8"),!0;let o=(0,b.readFileSync)(e,"utf-8").split(`
78
78
  `);if(o.some(a=>a.trim()===r))return!1;let s=o.findLastIndex(a=>a.startsWith("export"));return s>=0?o.splice(s+1,0,r):o.push(r),(0,b.writeFileSync)(e,o.join(`
79
- `),"utf-8"),!0},bl=e=>{if(!(0,b.existsSync)(e))return!1;let t=(0,b.readFileSync)(e,"utf-8"),r="export * from './events'";if(t.includes(r))return!1;let n=t;return n=n.replace(/\/\/\s*export \* from '\.\/events'/,r),n=n.replace(/\/\/\s*export \* from '\.\/stream-policies'/,"export * from './stream-policies'"),/export \* from '\.\/events\/\w+\/\w+'/.test(n)&&(n=n.replace(/export \* from '\.\/events\/\w+\/\w+'\n?/g,"")),n.includes(r)||(n=n.trimEnd()+`
79
+ `),"utf-8"),!0},bl=e=>{if(!(0,b.existsSync)(e))return!1;let t=(0,b.readFileSync)(e,"utf-8"),r="export * from './events'";if(t.split(`
80
+ `).some(s=>s.trim()===r||s.trim().startsWith(r)))return!1;let o=t;return o=o.replace(/\/\/\s*export \* from '\.\/events'/,r),o=o.replace(/\/\/\s*export \* from '\.\/stream-policies'/,"export * from './stream-policies'"),/export \* from '\.\/events\/\w+\/\w+'/.test(o)&&(o=o.replace(/export \* from '\.\/events\/\w+\/\w+'\n?/g,"")),o.includes(r)||(o=o.trimEnd()+`
80
81
  ${r}
81
- `),n!==t?((0,b.writeFileSync)(e,n,"utf-8"),!0):!1},kn=e=>{let{packagePath:t}=w(),{domain:r,event:n}=J(e),o=(0,X.join)(t,"src","events"),s=(0,X.join)(o,r),a=(0,X.join)(s,"index.ts"),i=(0,X.join)(o,"index.ts"),c=(0,X.join)(t,"src","index.ts"),l=e.split(".")[0],p=(0,X.join)(o,l);l!==r&&(0,b.existsSync)(p)&&(console.warn(`\u26A0\uFE0F Warning: Legacy folder '${l}/' found. Please migrate to '${r}/' to avoid conflicts.`),console.warn(` Run: mv ${p} ${s}`));let d=!1;return xl(a,n)&&(d=!0),wl(i,r)&&(d=!0),bl(c)&&(d=!0),d},vn=(e,t)=>{if(!(0,b.existsSync)(e))return!1;let r=`export * from './events/${t}'`,n=(0,b.readFileSync)(e,"utf-8");if(n.includes(`'./events/${t}'`))return!1;let o=n.split(`
82
+ `),o!==t?((0,b.writeFileSync)(e,o,"utf-8"),!0):!1},kn=e=>{let{packagePath:t}=w(),{domain:r,event:n}=J(e),o=(0,X.join)(t,"src","events"),s=(0,X.join)(o,r),a=(0,X.join)(s,"index.ts"),i=(0,X.join)(o,"index.ts"),c=(0,X.join)(t,"src","index.ts"),l=e.split(".")[0],p=(0,X.join)(o,l);l!==r&&(0,b.existsSync)(p)&&(console.warn(`\u26A0\uFE0F Warning: Legacy folder '${l}/' found. Please migrate to '${r}/' to avoid conflicts.`),console.warn(` Run: mv ${p} ${s}`));let d=!1;return xl(a,n)&&(d=!0),wl(i,r)&&(d=!0),bl(c)&&(d=!0),d},vn=(e,t)=>{if(!(0,b.existsSync)(e))return!1;let r=`export * from './events/${t}'`,n=(0,b.readFileSync)(e,"utf-8");if(n.includes(`'./events/${t}'`))return!1;let o=n.split(`
82
83
  `),s=o.findLastIndex(a=>a.startsWith("export"));return s>=0?o.splice(s+1,0,r):o.push("",r),(0,b.writeFileSync)(e,o.join(`
83
84
  `),"utf-8"),!0};var E=require("node:fs"),Q=require("node:path"),h=require("@faker-js/faker");v();var Is=[{pattern:"email",generate:()=>h.faker.internet.email(),hint:"email"},{pattern:"id",generate:()=>h.faker.string.uuid(),hint:"uuid"},{pattern:"firstname",generate:()=>h.faker.person.firstName(),hint:"firstName"},{pattern:"lastname",generate:()=>h.faker.person.lastName(),hint:"lastName"},{pattern:"name",generate:()=>h.faker.person.fullName(),hint:"fullName"},{pattern:"phone",generate:()=>h.faker.phone.number(),hint:"phoneNumber"},{pattern:"address",generate:()=>h.faker.location.streetAddress(),hint:"streetAddress"},{pattern:"street",generate:()=>h.faker.location.streetAddress(),hint:"streetAddress"},{pattern:"city",generate:()=>h.faker.location.city(),hint:"city"},{pattern:"country",generate:()=>h.faker.location.country(),hint:"country"},{pattern:"price",generate:()=>h.faker.number.float({min:10,max:1e3,fractionDigits:2}),hint:"price"},{pattern:"amount",generate:()=>h.faker.number.float({min:10,max:1e3,fractionDigits:2}),hint:"price"},{pattern:"total",generate:()=>h.faker.number.float({min:10,max:1e3,fractionDigits:2}),hint:"price"},{pattern:"quantity",generate:()=>h.faker.number.int({min:1,max:10}),hint:"quantity"},{pattern:"date",generate:()=>h.faker.date.recent().toISOString(),hint:"date"},{pattern:"createdat",generate:()=>h.faker.date.recent().toISOString(),hint:"date"},{pattern:"updatedat",generate:()=>h.faker.date.recent().toISOString(),hint:"date"}],Rs=e=>({email:()=>h.faker.internet.email(),datetime:()=>h.faker.date.recent().toISOString(),url:()=>h.faker.internet.url(),uuid:()=>h.faker.string.uuid(),date:()=>h.faker.date.recent().toISOString().split("T")[0],time:()=>h.faker.date.recent().toISOString().split("T")[1]?.split(".")[0]})[e]?.()??h.faker.lorem.word(),Ns=e=>{let t=e.toLowerCase(),r=Is.find(n=>t.includes(n.pattern));return r?{value:r.generate(),hint:r.hint}:null},Sl=(e,t)=>{if(e.format)return Rs(e.format);let r=Ns(t);if(r)return r.value;switch(e.type){case"string":return h.faker.lorem.word();case"number":return h.faker.number.int({min:1,max:100});case"boolean":return h.faker.datatype.boolean();case"array":return e.element?[Cn(e.element)]:[];case"object":return Cn(e);default:return null}},Cn=e=>{let t={},r=e.shape??(typeof e.def?.shape=="function"?e.def.shape():void 0);if(!r)return t;for(let[n,o]of Object.entries(r))t[n]=Sl(o,n);return t},Pl=async e=>{try{let{createJiti:t}=await import("jiti"),n=t(process.cwd(),{interopDefault:!0})(e),o=Object.entries(n).find(([s])=>s.endsWith("Schema")||s==="schema");if(o?.[1]){let s=o[1],a=Cn(s);if(a&&typeof a=="object"&&Object.keys(a).length>0){let i={};return xn(a,i,""),{data:a,faker:i}}}}catch{}return null},xn=(e,t,r)=>{if(!(!e||typeof e!="object"))for(let[n,o]of Object.entries(e)){let s=r?`${r}.${n}`:n,a=n.toLowerCase(),i=Is.find(c=>a.includes(c.pattern));i&&(i.hint!=="uuid"||typeof o=="string")&&(t[s]=i.hint),typeof o=="object"&&o!==null&&!Array.isArray(o)?xn(o,t,s):Array.isArray(o)&&o.length>0&&typeof o[0]=="object"&&xn(o[0],t,`${s}[0]`)}},Tl=e=>({string:()=>h.faker.lorem.word(),number:()=>h.faker.number.int({min:1,max:100}),boolean:()=>h.faker.datatype.boolean()})[e]?.(),El=(e,t,r)=>{let n=/(\w+):\s*z\.(\w+)\(/g,o=Array.from(e.matchAll(n));for(let[,s,a]of o){if(a==="array"||a==="object")continue;let i=Ns(s);if(i)t[s]=i.value,i.hint&&(r[s]=i.hint);else{let c=Tl(a);c!==void 0&&(t[s]=c)}}},$l=(e,t,r)=>{let n=/(\w+):\s*z\.string\(\)\.(datetime|email|url|uuid)\(\)/g,o=Array.from(e.matchAll(n));for(let[,s,a]of o)t[s]=Rs(a),r[s]=a==="datetime"?"date":a},Ms=e=>{let t={},r={};return El(e,t,r),$l(e,t,r),{data:t,faker:r}},or=async e=>{let{eventsPath:t}=w(),r=yt(e);if(!(0,E.existsSync)(r))return null;let o=(0,E.readFileSync)(r,"utf-8").match(/type:\s*['"]([^'"]+)['"]/),s=o?o[1]:e,a=await Pl(r);if(!a){let x=pn(e);x&&(a=Ms(x))}if(!a)return null;let i={eventName:s,description:`Mock data for ${s} event`,data:a.data};Object.keys(a.faker).length>0&&(i.faker=a.faker);let{domain:c,event:l}=J(e),p=(0,Q.join)(t,c,`${l}.mock.json`),d=(0,Q.join)(t,c);return(0,E.existsSync)(d)||(0,E.mkdirSync)(d,{recursive:!0}),(0,E.writeFileSync)(p,JSON.stringify(i,null,2),"utf-8"),p};var Os=e=>{let t=e.match(/import\s+\{[^}]*?(\w+Contract)[^}]*?\}\s+from\s+['"][^'"]+\/contracts['"]/);return t?t[1].replace("Contract","").replace(/([A-Z])/g,(n,o,s)=>(s>0?".":"")+o.toLowerCase()):null},Al=(e,t,r)=>{if(!(0,E.existsSync)(e))return!1;let n=(0,E.readFileSync)(e,"utf-8"),o=n.match(/export const \w+(?:Schema|Data)\s*=\s*z\.object\(\s*\{([\s\S]*?)\}\s*\)/m)??n.match(/schema:\s*z\.object\(\s*\{([\s\S]*?)\}\s*\)/m);if(!o)return!1;let s=Ms(o[1]),a={eventName:r,description:`Mock data for ${r} event`,data:s.data};return Object.keys(s.faker).length>0&&(a.faker=s.faker),(0,E.writeFileSync)(t,JSON.stringify(a,null,2)),!0},wn=async(e,t={})=>{let r=(0,Q.join)(e,"src","events");if(!(0,E.existsSync)(r))return{mockPaths:[],skippedHandlers:[]};let n=(0,E.readdirSync)(r).filter(a=>a.endsWith(".event.ts")).map(a=>(0,Q.join)(r,a)),o=[],s=[];for(let a of n){let i=(0,E.readFileSync)(a,"utf-8"),c=Os(i);if(!c){s.push(`${(0,Q.basename)(a)} (Handler does not use contracts)`);continue}let{eventName:l}=J(c),p=t.outputDir??w().eventsPath,d=(0,Q.join)(p,`${l}.mock.json`);if((0,E.existsSync)(d)&&!t.overwrite){s.push(`${(0,Q.basename)(a)} (Mock already exists)`);continue}if(t.outputDir){let H=(0,Q.join)(t.outputDir,`${l}.ts`);Al(H,d,c)&&o.push(d);continue}let x=await or(c);x&&o.push(x)}return{mockPaths:o,skippedHandlers:s}};var _s=e=>{let t=e.split("/").pop()||"service",r=(0,js.join)(e,"src","events","events.service.ts");if(!(0,sr.existsSync)(r))return!1;let n=fn(e);if(n.length===0||(0,sr.readFileSync)(r,"utf-8").replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").includes("consumeJetStreams"))return!1;let i=hn(n),c=yn(i,t);if(!c)return!1;let l=new Fs.Project({skipAddingFilesFromTsConfig:!0,skipFileDependencyResolution:!0}),p=l.addSourceFileAtPath(r),d=!1;for(let x of p.getClasses()){let H=x.getMethod("startConsumers");if(!H)continue;let B=[...c.split(`
84
85
  `),""," this.logger.log('Event consumers started successfully')"].join(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crossdelta/platform-sdk",
3
- "version": "0.18.5",
3
+ "version": "0.18.6",
4
4
  "description": "Platform toolkit for event-driven microservices — keeping code and infrastructure in lockstep.",
5
5
  "keywords": [
6
6
  "cli",