@snowplow/snowtype 0.13.1 → 0.13.2

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/dist/index.js +1 -1
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use strict";var Xn=Object.create;var re=Object.defineProperty;var Yn=Object.getOwnPropertyDescriptor;var Zn=Object.getOwnPropertyNames;var Qn=Object.getPrototypeOf,ti=Object.prototype.hasOwnProperty;var ei=(t,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Zn(e))!ti.call(t,o)&&o!==n&&re(t,o,{get:()=>e[o],enumerable:!(i=Yn(e,o))||i.enumerable});return t};var h=(t,e,n)=>(n=t!=null?Xn(Qn(t)):{},ei(e||!t||!t.__esModule?re(n,"default",{value:t,enumerable:!0}):n,t));var Vn=h(require("process")),O=require("@commander-js/extra-typings");var D=require("@inquirer/prompts");var ni={AuthError:"Authentication failed. Check if your API key and organization ID are correct.",ConfigAlreadyExists:"Snowtype config file already exists.",ConfigNotExists:"Snowtype config file does not exist in current directory. Start with running 'init'.",ConfigInvalid:"Snowtype config exists but it is invalid.",InternalError:"An internal error occured.",InvalidOption:"Invalid option provided.",MissingOptions:"Action called with no options.",WriteLockFile:"Failed writing lock file.",MissingLockFile:"Missing lockfile. You might need to run `snowtype generate` first.",GenerationFailed:"Something went wrong with code generation.",PatchingNotSupported:"Patching is only supported using a Snowtype config file in JSON format.",DevNotAllowed:"Code generation using schemas in DEV environment not allowed. Publish the schemas and retry.",AuthCredentialsMissing:"Required API key credentials not detected. Please refer to https://docs.snowplow.io/docs/collecting-data/code-generation/using-the-cli/#authenticating-with-the-console"},ii="Please report a bug.",S=class extends Error{code;constructor(e,n=""){let i=ni[e].concat(n);super(i),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=e}},Q=class extends S{constructor(){super("GenerationFailed")}},B=class extends S{constructor(){super("ConfigAlreadyExists")}},tt=class extends S{constructor(){super("ConfigNotExists")}},et=class extends S{constructor(e){super("ConfigInvalid",e)}},nt=class extends S{constructor(e){super("InternalError",e.concat(ii))}},$=class extends S{constructor(e,n){let i=`Value ${n} is an invalid ${e}.`;super("InvalidOption",i)}},it=class extends S{constructor(){super("MissingOptions")}},R=class extends S{constructor(){super("AuthError")}},ot=class extends S{constructor(){super("WriteLockFile")}},rt=class extends S{constructor(){super("MissingLockFile")}},at=class extends S{constructor(){super("PatchingNotSupported")}},st=class extends S{constructor(){super("DevNotAllowed")}},ct=class extends S{constructor(){super("AuthCredentialsMissing")}};var ae=h(require("got"));async function se({schema:t}){return(await(0,ae.default)(`https://raw.githubusercontent.com/snowplow/iglu-central/master/schemas/${t.replace("iglu:","")}`)).body}var ht=h(require("got"));var ge=require("js-sha256"),$t=h(require("assert"));var u=h(require("joi")),mt=require("@snowplow/snowtype-core");var Lt=h(require("assert"));var J="snowtype.config",pt=".js",ut=".ts",dt=".json",ce=Object.freeze([pt,ut,dt]),lt=".snowtype-lock.json",Ft="snowplow";var K={"google-tag-manager":[{value:"javascript-gtm",name:"JavaScript"}],"@snowplow/javascript-tracker":[{value:"javascript",name:"JavaScript"}],"@snowplow/browser-tracker":[{value:"javascript",name:"JavaScript"},{value:"typescript",name:"TypeScript"}],"@snowplow/node-tracker":[{value:"javascript",name:"JavaScript"},{value:"typescript",name:"TypeScript"}],"snowplow-android-tracker":[{value:"kotlin",name:"Kotlin"}],"snowplow-ios-tracker":[{value:"swift",name:"Swift"}],"snowplow-golang-tracker":[{value:"go",name:"Go"}],"@snowplow/react-native-tracker":[{value:"typescript",name:"TypeScript"}],"snowplow-flutter-tracker":[{value:"dart",name:"Dart"}],"snowplow-java-tracker":[{value:"java",name:"Java"}]},pe={commands:{generate:{instructions:!1,validations:!1,disallowDevSchemas:!1,deprecateOnlyOnProdAvailableUpdates:!1},update:{maximumBump:"major",regenerateOnUpdate:!1,showOnlyProdUpdates:!1},patch:{regenerateOnPatch:!1}}},ue=["iglu:com.snowplowanalytics.snowplow/page_ping/jsonschema/1-0-0","iglu:com.snowplowanalytics.snowplow/link_click/jsonschema/1-0-1","iglu:com.snowplowanalytics.snowplow/page_view/jsonschema/1-0-0","iglu:com.snowplowanalytics.mobile/screen_view/jsonschema/1-0-0","iglu:com.snowplowanalytics.snowplow/button_click/jsonschema/1-0-0","iglu:com.snowplowanalytics.snowplow/application_background/jsonschema/1-0-0","iglu:com.snowplowanalytics.snowplow/application_foreground/jsonschema/1-0-0","iglu:com.snowplowanalytics.mobile/application_install/jsonschema/1-0-0","iglu:com.snowplowanalytics.mobile/screen_end/jsonschema/1-0-0","iglu:com.snowplowanalytics.snowplow/custom_event/jsonschema/1-0-0","iglu:com.snowplowanalytics.snowplow/expose_element/jsonschema/1-0-0","iglu:com.snowplowanalytics.snowplow/create_element/jsonschema/1-0-0"],de="iglu:com.snowplowanalytics.snowplow.ecommerce";var gt=require("lodash");function me(t){let e=t.split("-");(0,Lt.default)(e.length===3,"invalid SchemaVer"),(0,Lt.default)(e.filter(n=>isNaN(parseInt(n))).length===0,"invalid SchemaVer")}function V(t){t.options=(0,gt.merge)((0,gt.cloneDeep)(pe),t.options||{})}var le=new RegExp("^iglu:[a-zA-Z0-9-_.]+/[a-zA-Z0-9-_]+/[a-zA-Z0-9-_]+/[0-9]+-[0-9]+-[0-9]+$"),oi=u.default.object().required().keys({tracker:u.default.string().required().valid(...mt.trackerTemplates),language:u.default.string().required().valid(...mt.languageIds),outpath:u.default.string().required(),organizationId:u.default.string().when("dataStructures",{is:u.default.array().min(1),then:u.default.required(),otherwise:u.default.optional()}).when("eventSpecificationIds",{is:u.default.array().min(1),then:u.default.required(),otherwise:u.default.optional()}).when("dataProductIds",{is:u.default.array().min(1),then:u.default.required(),otherwise:u.default.optional()}),igluCentralSchemas:u.default.array().optional().items(u.default.string().regex(le)),repositories:u.default.array().optional().items(u.default.string()),dataStructures:u.default.array().optional().items(u.default.string().regex(le)),eventSpecificationIds:u.default.array().optional().items(u.default.string()),dataProductIds:u.default.array().optional().items(u.default.string()),options:u.default.object().optional().keys({commands:u.default.object().optional().keys({generate:u.default.object().optional().keys({instructions:u.default.boolean().optional(),validations:u.default.boolean().optional(),disallowDevSchemas:u.default.boolean().optional(),deprecateOnlyOnProdAvailableUpdates:u.default.boolean().optional()}),patch:u.default.object().optional().keys({regenerateOnPatch:u.default.boolean().optional()}),update:u.default.object().optional().keys({maximumBump:u.default.string().valid("major","minor","patch").optional(),regenerateOnUpdate:u.default.boolean().optional(),showOnlyProdUpdates:u.default.boolean().optional()})})})}),j=t=>{let e=oi.validate(t,{abortEarly:!1,convert:!1});if(e.error)throw new et(e.error.annotate());return t};function ri(t){let e=ge.sha256.create();return e.update(t),e.hex()}function fe(t,e){let{vendor:n,name:i,format:o}=P(t);return ri(`${e}-${n}-${i}-${o}`)}function P(t){let e=t.replace("iglu:",""),[n,i,o,r]=e.split("/");return(0,$t.default)(typeof n=="string"&&typeof i=="string"&&typeof o=="string"&&typeof r=="string",`invalid iglu uri ${t}`),me(r),{vendor:n,name:i,format:o,version:r}}function he(t,{vendor:e,name:n,format:i,version:o}){let r=t.replace("iglu:",""),[a,s,p,c]=r.split("/");return`iglu:${e||a}/${n||s}/${i||p}/${o||c}`}function Se(t){return t.some(e=>e.eventSchema.isEcomTemplateSchema)}function q(t){let[e,n,i]=t.split("-").map(o=>parseInt(o));return{model:e,revision:n,addition:i}}function ve(t,e,n=0){if(t===e&&n!==0)return"patch";let{model:i,revision:o,addition:r}=q(t),{model:a,revision:s,addition:p}=q(e);if(i!==a)return"major";if(o!==s)return"minor";if(r!==p)return"patch";(0,$t.default)(!1,"SchemaVer checking went wrong")}var ft=class extends Error{response;constructor(e){let n=e.response?.statusCode||0,{method:i,url:o}=e.options,r=e.response?.body||e.message,a=[[n,i,o].filter(Boolean).join(" "),r].filter(Boolean).join(`
2
- `);super(a),this.response={statusCode:n,body:r}}};function ye(t){return!!Object.hasOwn(t||{},"response")}var M="0.13.1";var we=h(require("p-limit")),x=class t{apiKeyId;apiKey;organizationId;accessToken;pLimit;dataProductsCache=new Map;eventSpecsCache=new Map;schemaVersionsDraftsCache=new Map;schemaVersionsDevCache=new Map;schemaVersionsProdCache=new Map;sourceApplicationsCache=new Map;apiUrl=process.env.SNOWPLOW_CONSOLE_API_URL||"https://console.snowplowanalytics.com/api/msc";constructor({apiKeyId:e,apiKey:n,organizationId:i,requestLimit:o=20}){this.apiKeyId=e,this.apiKey=n,this.organizationId=i,this.pLimit=(0,we.default)(o)}static async create(e){let n=new t(e);return await n.initialize(),n}async initialize(){await this.fetchAccessToken(),await Promise.all([this.bulkFetchAllDataProducts(),this.bulkFetchAllEventSpecifications(),this.bulkFetchAllSchemaDraftsVersions(),this.bulkFetchAllSchemaVersions("DEV"),this.bulkFetchAllSchemaVersions("PROD")])}async bulkFetchAllDataProducts(){let e=`${this.apiUrl}/v1/organizations/${this.organizationId}/data-products/v2`,n=await this.fetchResource(e);n.data.forEach(i=>this.dataProductsCache.set(i.id,i)),n.includes.sourceApplications?.forEach(i=>{this.sourceApplicationsCache.set(i.id,i)})}async bulkFetchAllEventSpecifications(){let e=`${this.apiUrl}/v1/organizations/${this.organizationId}/event-specs/v1`,n=await this.fetchResource(e);n.data.forEach(i=>{let o={...n.metadata,outdatedDsWarnings:n.metadata?.outdatedDsWarnings.filter(a=>a.id===i.id)||[],hiddenDsWarnings:n.metadata?.hiddenDsWarnings.filter(a=>a.id===i.id)||[],metrics:n.metadata?.metrics.filter(a=>a.id===i.id)||[]},r={data:i,metadata:o};this.eventSpecsCache.set(i.id,r)})}async bulkFetchAllSchemaVersions(e){let n=`${this.apiUrl}/v1/organizations/${this.organizationId}/data-structures/v1/schemas/versions?env=${e}`,i=await this.fetchResource(n),o=e==="DEV"?this.schemaVersionsDevCache:this.schemaVersionsProdCache;i.forEach(r=>{let a=`iglu:${r.self.vendor}/${r.self.name}/${r.self.format}/${r.self.version}`;o.set(a,r)})}async bulkFetchAllSchemaDraftsVersions(){let e=`${this.apiUrl}/v1/organizations/${this.organizationId}/data-structure-drafts/v1/schemas`,n=await this.fetchResource(e),i=this.schemaVersionsDraftsCache;n.forEach(o=>{let r=`iglu:${o.self.vendor}/${o.self.name}/${o.self.format}/${o.self.version}`;i.set(r,o)})}async fetchAccessToken(){if(this.accessToken)return this.accessToken;let e=`${this.apiUrl}/v1/organizations/${this.organizationId}/credentials/v3/token`,{accessToken:n}=await(0,ht.default)(e,{headers:{"X-API-Key-Id":this.apiKeyId,"X-API-Key":this.apiKey,"X-Snowtype":M}}).json();return this.accessToken=n,n}fetchResource(e){return this.pLimit(async()=>{try{let n=await this.fetchAccessToken();return await(0,ht.default)(e,{headers:{Authorization:"Bearer "+n,"X-Snowtype":M}}).json()}catch(n){throw ye(n)?new ft(n):n}})}getSchemaVersion({schema:e,env:n="DEV"}){return(n==="DEV"?this.schemaVersionsDevCache:this.schemaVersionsProdCache).get(e)??(()=>{throw new Error(`Schema ${e} not found in ${n} environment`)})()}getAllSchemaDraftVersion(){return this.schemaVersionsDraftsCache}async fetchDeployments({schema:e,deploymentEnv:n}){let i=fe(e,this.organizationId),o=25,r=[],a=!0,s=0,p=c=>`${this.apiUrl}/v1/organizations/${this.organizationId}/data-structures/v1/${i}/deployments?size=${o}&from=${c}${n?`&env=${n}`:""}`;for(;a;){let c=await this.fetchResource(p(s));s+=o,r=r.concat(c),c.length===0&&(a=!1)}return r}getEventSpecificationById(e){let n=this.eventSpecsCache.get(e)??(()=>{throw new Error(`Event specification ${e} not found`)})();return{data:n.data,metadata:n.metadata}}async fetchImageVariant({imageId:e,imageVariant:n}){let i=`${this.apiUrl}/v1/organizations/${this.organizationId}/images/v1/${e}/${n}`,o=await this.fetchAccessToken();return(0,ht.default)(i,{headers:{Authorization:"Bearer "+o,"X-Snowtype":M}})}getDataProductById(e){let n=this.dataProductsCache.get(e)??(()=>{throw new Error(`Data product ${e} not found`)})(),i=(n.sourceApplications||[]).map(o=>this.sourceApplicationsCache.get(o)).filter(Boolean);return{data:[n],includes:{sourceApplications:i}}}async authenticate(){try{return await this.fetchAccessToken(),!0}catch{return!1}}};var E=require("path"),y=require("fs");var Nt=h(require("util")),_t=require("tsx/cjs/api");var k=(()=>{let t="json";return{setFormat:i=>t=i,getFormat:()=>t}})();var Et=require("@snowplow/snowtype-core");var vt=require("fs");var St=h(require("assert"));var Ie=require("semver");function Ee(t,e,n){try{let i=(0,vt.readFileSync)(n,{encoding:"utf-8"}),o=JSON.parse(i);return o[t].some(a=>a===e)||o[t].push(e),(0,vt.writeFileSync)(n,jt(o)),!0}catch(i){return console.error(i),!1}}var ai=(t,e)=>{let{model:n,revision:i,addition:o}=q(t.version),{model:r,revision:a,addition:s}=q(e.version);return(0,St.default)(n!==void 0&&i!==void 0&&o!==void 0&&r!==void 0&&a!==void 0&&s!==void 0,`Invalid version number comparing (${t}, ${e})`),n>r?1:n<r?-1:i>a?1:i<a?-1:o>s?1:o<s?-1:t.patchLevel>e.patchLevel&&t.contentHash!==e.contentHash?1:e.patchLevel>t.patchLevel&&t.contentHash!==e.contentHash||t.env==="DEV"&&e.env==="PROD"?-1:t.env==="PROD"&&e.env==="DEV"?1:0};async function Pe(t,e,n,i){return(await Promise.all(e.map(async r=>{let{version:a}=P(r),s=await t.fetchDeployments({schema:r,...i&&{deploymentEnv:"PROD"}}),p=si(s,a,n);p.sort(ai);let c=p.pop();if(!c)return null;let d={previous:r,next:he(r,{version:c.version}),nextEnv:c.env};return c.version!==a?{...d,nextReason:"version"}:c.patchLevel>0&&c.env==="DEV"?{...d,nextReason:"patch"}:null}))).flatMap(r=>r===null?[]:[r])}async function Rt(t,e){return Promise.all(e.map(async n=>{try{t.getSchemaVersion({schema:n,env:"PROD"})}catch(i){if(i.response?.statusCode===404||i.message?.includes("not found in PROD environment"))try{return t.getSchemaVersion({schema:n,env:"DEV"}),n}catch(r){if(!(r.response?.statusCode===404||r.message?.includes("not found in DEV environment")))throw r}}return null})).then(n=>n.flatMap(i=>i!==null?[i]:[]))}async function xe(t,e,n){let{eventSpecifications:i}=n,o={};return await Promise.all(e.map(async r=>{let a=i[r];if(!a)return r;let s=t.getEventSpecificationById(r).data;(0,St.default)(!!s,`failed to fetch event spec ${r}`),(0,St.default)(!!s.version,`event spec with no version ${r}`);let p=[s.event?.source,...s.entities?.tracked?.map(d=>d.source)||[]].flatMap(d=>typeof d=="string"?[d]:[]),c=await Rt(t,p);return(s.version||0)>a&&(o[r]={previous:a,next:s.version,devOnlySchema:c}),r})),o}function si(t,e,n){return t.filter(i=>Vt(e,i.version)!==1).filter(i=>i.version!==e||i.patchLevel).map(i=>({...i,updateType:ve(i.version,e,i.patchLevel)})).filter(ci(n))}function ci(t){return({updateType:e})=>{switch(t){case"major":return!0;case"minor":return e==="patch"||e==="minor";case"patch":return e==="patch"}}}function Vt(t,e){let n=t.replaceAll("-","."),i=e.replaceAll("-",".");return(0,Ie.compare)(n,i)}var Ae=require("cli-spinner"),v=h(require("chalk"));function De(){let t=new Ae.Spinner;return t.setSpinnerString(18),t}var pi="https://snowplow.io",ui="https://docs.snowplow.io/docs/collecting-data/code-generation/",X={SUCCESS:"\u2714",LOG:"\u2139",DEBUG:"\u27A4",ERROR:"\u2717",WARN:"\u26A0"},Oe={LINK:"#9911BB",OPTION:"#9911DD"};function Ce(t){return v.default.hex(Oe.LINK).bold(t)}function T(t){return v.default.hex(Oe.OPTION).italic(t)}function yt(t,e){switch(t){case"h1":return v.default.bold.underline(e);default:return v.default.bold(e)}}function be(){return`
2
+ `);super(a),this.response={statusCode:n,body:r}}};function ye(t){return!!Object.hasOwn(t||{},"response")}var M="0.13.2";var we=h(require("p-limit")),x=class t{apiKeyId;apiKey;organizationId;accessToken;pLimit;dataProductsCache=new Map;eventSpecsCache=new Map;schemaVersionsDraftsCache=new Map;schemaVersionsDevCache=new Map;schemaVersionsProdCache=new Map;sourceApplicationsCache=new Map;apiUrl=process.env.SNOWPLOW_CONSOLE_API_URL||"https://console.snowplowanalytics.com/api/msc";constructor({apiKeyId:e,apiKey:n,organizationId:i,requestLimit:o=20}){this.apiKeyId=e,this.apiKey=n,this.organizationId=i,this.pLimit=(0,we.default)(o)}static async create(e){let n=new t(e);return await n.initialize(),n}async initialize(){await this.fetchAccessToken(),await Promise.all([this.bulkFetchAllDataProducts(),this.bulkFetchAllEventSpecifications(),this.bulkFetchAllSchemaDraftsVersions(),this.bulkFetchAllSchemaVersions("DEV"),this.bulkFetchAllSchemaVersions("PROD")])}async bulkFetchAllDataProducts(){let e=`${this.apiUrl}/v1/organizations/${this.organizationId}/data-products/v2`,n=await this.fetchResource(e);n.data.forEach(i=>this.dataProductsCache.set(i.id,i)),n.includes.sourceApplications?.forEach(i=>{this.sourceApplicationsCache.set(i.id,i)})}async bulkFetchAllEventSpecifications(){let e=`${this.apiUrl}/v1/organizations/${this.organizationId}/event-specs/v1`,n=await this.fetchResource(e);n.data.forEach(i=>{let o={...n.metadata,outdatedDsWarnings:n.metadata?.outdatedDsWarnings.filter(a=>a.id===i.id)||[],hiddenDsWarnings:n.metadata?.hiddenDsWarnings.filter(a=>a.id===i.id)||[],metrics:n.metadata?.metrics.filter(a=>a.id===i.id)||[]},r={data:i,metadata:o};this.eventSpecsCache.set(i.id,r)})}async bulkFetchAllSchemaVersions(e){let n=`${this.apiUrl}/v1/organizations/${this.organizationId}/data-structures/v1/schemas/versions?env=${e}`,i=await this.fetchResource(n),o=e==="DEV"?this.schemaVersionsDevCache:this.schemaVersionsProdCache;i.forEach(r=>{let a=`iglu:${r.self.vendor}/${r.self.name}/${r.self.format}/${r.self.version}`;o.set(a,r)})}async bulkFetchAllSchemaDraftsVersions(){let e=`${this.apiUrl}/v1/organizations/${this.organizationId}/data-structure-drafts/v1/schemas`,n=await this.fetchResource(e),i=this.schemaVersionsDraftsCache;n.forEach(o=>{let r=`iglu:${o.self.vendor}/${o.self.name}/${o.self.format}/${o.self.version}`;i.set(r,o)})}async fetchAccessToken(){if(this.accessToken)return this.accessToken;let e=`${this.apiUrl}/v1/organizations/${this.organizationId}/credentials/v3/token`,{accessToken:n}=await(0,ht.default)(e,{headers:{"X-API-Key-Id":this.apiKeyId,"X-API-Key":this.apiKey,"X-Snowtype":M}}).json();return this.accessToken=n,n}fetchResource(e){return this.pLimit(async()=>{try{let n=await this.fetchAccessToken();return await(0,ht.default)(e,{headers:{Authorization:"Bearer "+n,"X-Snowtype":M}}).json()}catch(n){throw ye(n)?new ft(n):n}})}getSchemaVersion({schema:e,env:n="DEV"}){return(n==="DEV"?this.schemaVersionsDevCache:this.schemaVersionsProdCache).get(e)??(()=>{throw new Error(`Schema ${e} not found in ${n} environment`)})()}getAllSchemaDraftVersion(){return this.schemaVersionsDraftsCache}async fetchDeployments({schema:e,deploymentEnv:n}){let i=fe(e,this.organizationId),o=25,r=[],a=!0,s=0,p=c=>`${this.apiUrl}/v1/organizations/${this.organizationId}/data-structures/v1/${i}/deployments?size=${o}&from=${c}${n?`&env=${n}`:""}`;for(;a;){let c=await this.fetchResource(p(s));s+=o,r=r.concat(c),c.length===0&&(a=!1)}return r}getEventSpecificationById(e){let n=this.eventSpecsCache.get(e)??(()=>{throw new Error(`Event specification ${e} not found`)})();return{data:n.data,metadata:n.metadata}}async fetchImageVariant({imageId:e,imageVariant:n}){let i=`${this.apiUrl}/v1/organizations/${this.organizationId}/images/v1/${e}/${n}`,o=await this.fetchAccessToken();return(0,ht.default)(i,{headers:{Authorization:"Bearer "+o,"X-Snowtype":M}})}getDataProductById(e){let n=this.dataProductsCache.get(e)??(()=>{throw new Error(`Data product ${e} not found`)})(),i=(n.sourceApplications||[]).map(o=>this.sourceApplicationsCache.get(o)).filter(Boolean);return{data:[n],includes:{sourceApplications:i}}}async authenticate(){try{return await this.fetchAccessToken(),!0}catch{return!1}}};var E=require("path"),y=require("fs");var Nt=h(require("util")),_t=require("tsx/cjs/api");var k=(()=>{let t="json";return{setFormat:i=>t=i,getFormat:()=>t}})();var Et=require("@snowplow/snowtype-core");var vt=require("fs");var St=h(require("assert"));var Ie=require("semver");function Ee(t,e,n){try{let i=(0,vt.readFileSync)(n,{encoding:"utf-8"}),o=JSON.parse(i);return o[t].some(a=>a===e)||o[t].push(e),(0,vt.writeFileSync)(n,jt(o)),!0}catch(i){return console.error(i),!1}}var ai=(t,e)=>{let{model:n,revision:i,addition:o}=q(t.version),{model:r,revision:a,addition:s}=q(e.version);return(0,St.default)(n!==void 0&&i!==void 0&&o!==void 0&&r!==void 0&&a!==void 0&&s!==void 0,`Invalid version number comparing (${t}, ${e})`),n>r?1:n<r?-1:i>a?1:i<a?-1:o>s?1:o<s?-1:t.patchLevel>e.patchLevel&&t.contentHash!==e.contentHash?1:e.patchLevel>t.patchLevel&&t.contentHash!==e.contentHash||t.env==="DEV"&&e.env==="PROD"?-1:t.env==="PROD"&&e.env==="DEV"?1:0};async function Pe(t,e,n,i){return(await Promise.all(e.map(async r=>{let{version:a}=P(r),s=await t.fetchDeployments({schema:r,...i&&{deploymentEnv:"PROD"}}),p=si(s,a,n);p.sort(ai);let c=p.pop();if(!c)return null;let d={previous:r,next:he(r,{version:c.version}),nextEnv:c.env};return c.version!==a?{...d,nextReason:"version"}:c.patchLevel>0&&c.env==="DEV"?{...d,nextReason:"patch"}:null}))).flatMap(r=>r===null?[]:[r])}async function Rt(t,e){return Promise.all(e.map(async n=>{try{t.getSchemaVersion({schema:n,env:"PROD"})}catch(i){if(i.response?.statusCode===404||i.message?.includes("not found in PROD environment"))try{return t.getSchemaVersion({schema:n,env:"DEV"}),n}catch(r){if(!(r.response?.statusCode===404||r.message?.includes("not found in DEV environment")))throw r}}return null})).then(n=>n.flatMap(i=>i!==null?[i]:[]))}async function xe(t,e,n){let{eventSpecifications:i}=n,o={};return await Promise.all(e.map(async r=>{let a=i[r];if(!a)return r;let s=t.getEventSpecificationById(r).data;(0,St.default)(!!s,`failed to fetch event spec ${r}`),(0,St.default)(!!s.version,`event spec with no version ${r}`);let p=[s.event?.source,...s.entities?.tracked?.map(d=>d.source)||[]].flatMap(d=>typeof d=="string"?[d]:[]),c=await Rt(t,p);return(s.version||0)>a&&(o[r]={previous:a,next:s.version,devOnlySchema:c}),r})),o}function si(t,e,n){return t.filter(i=>Vt(e,i.version)!==1).filter(i=>i.version!==e||i.patchLevel).map(i=>({...i,updateType:ve(i.version,e,i.patchLevel)})).filter(ci(n))}function ci(t){return({updateType:e})=>{switch(t){case"major":return!0;case"minor":return e==="patch"||e==="minor";case"patch":return e==="patch"}}}function Vt(t,e){let n=t.replaceAll("-","."),i=e.replaceAll("-",".");return(0,Ie.compare)(n,i)}var Ae=require("cli-spinner"),v=h(require("chalk"));function De(){let t=new Ae.Spinner;return t.setSpinnerString(18),t}var pi="https://snowplow.io",ui="https://docs.snowplow.io/docs/collecting-data/code-generation/",X={SUCCESS:"\u2714",LOG:"\u2139",DEBUG:"\u27A4",ERROR:"\u2717",WARN:"\u26A0"},Oe={LINK:"#9911BB",OPTION:"#9911DD"};function Ce(t){return v.default.hex(Oe.LINK).bold(t)}function T(t){return v.default.hex(Oe.OPTION).italic(t)}function yt(t,e){switch(t){case"h1":return v.default.bold.underline(e);default:return v.default.bold(e)}}function be(){return`
3
3
  ${yt("h1","CLI Help")}
4
4
 
5
5
  For more information visit the Snowplow website ${Ce(pi)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snowplow/snowtype",
3
- "version": "0.13.1",
3
+ "version": "0.13.2",
4
4
  "description": "A code generator CLI for faster and type-safe Snowplow tracking code",
5
5
  "author": "Peter Perlepes <peter@snowplowanalytics.com>",
6
6
  "homepage": "https://snowplow.io/",
@@ -14,7 +14,7 @@
14
14
  "dependencies": {
15
15
  "@commander-js/extra-typings": "^11.1.0",
16
16
  "@inquirer/prompts": "^3.3.0",
17
- "@snowplow/snowtype-core": "^0.13.1",
17
+ "@snowplow/snowtype-core": "^0.13.2",
18
18
  "chalk": "^4.1.2",
19
19
  "cli-spinner": "^0.2.10",
20
20
  "dotenv": "^16.3.1",