@snowplow/snowtype 0.13.4 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 ii=Object.create;var ae=Object.defineProperty;var oi=Object.getOwnPropertyDescriptor;var ri=Object.getOwnPropertyNames;var ai=Object.getPrototypeOf,si=Object.prototype.hasOwnProperty;var ci=(t,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ri(e))!si.call(t,o)&&o!==n&&ae(t,o,{get:()=>e[o],enumerable:!(i=oi(e,o))||i.enumerable});return t};var g=(t,e,n)=>(n=t!=null?ii(ai(t)):{},ci(e||!t||!t.__esModule?ae(n,"default",{value:t,enumerable:!0}):n,t));var Mn=g(require("process")),k=require("@commander-js/extra-typings");var b=require("@inquirer/prompts");var pi={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"},ui="Please report a bug.",h=class extends Error{code;constructor(e,n=""){let i=pi[e].concat(n);super(i),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=e}},tt=class extends h{constructor(){super("GenerationFailed")}},J=class extends h{constructor(){super("ConfigAlreadyExists")}},et=class extends h{constructor(){super("ConfigNotExists")}},nt=class extends h{constructor(e){super("ConfigInvalid",e)}},it=class extends h{constructor(e){super("InternalError",e.concat(ui))}},j=class extends h{constructor(e,n){let i=`Value ${n} is an invalid ${e}.`;super("InvalidOption",i)}},ot=class extends h{constructor(){super("MissingOptions")}},M=class extends h{constructor(){super("AuthError")}},rt=class extends h{constructor(){super("WriteLockFile")}},at=class extends h{constructor(){super("MissingLockFile")}},st=class extends h{constructor(){super("PatchingNotSupported")}},ct=class extends h{constructor(){super("DevNotAllowed")}},pt=class extends h{constructor(){super("AuthCredentialsMissing")}};var se=g(require("got"));async function ce({schema:t}){return(await(0,se.default)(`https://raw.githubusercontent.com/snowplow/iglu-central/master/schemas/${t.replace("iglu:","")}`)).body}var St=g(require("got"));var fe=require("js-sha256"),Rt=g(require("assert"));var u=g(require("joi")),gt=require("@snowplow/snowtype-core");var $t=g(require("assert"));var K="snowtype.config",ut=".js",dt=".ts",lt=".json",pe=Object.freeze([ut,dt,lt]),mt=".snowtype-lock.json",Lt="snowplow";var q={"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"}]},ue={commands:{generate:{instructions:!1,validations:!1,disallowDevSchemas:!1,deprecateOnlyOnProdAvailableUpdates:!1},update:{maximumBump:"major",regenerateOnUpdate:!1,showOnlyProdUpdates:!1},patch:{regenerateOnPatch:!1}}},de=["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"],le="iglu:com.snowplowanalytics.snowplow.ecommerce";var ft=require("lodash");function ge(t){let e=t.split("-");(0,$t.default)(e.length===3,"invalid SchemaVer"),(0,$t.default)(e.filter(n=>isNaN(parseInt(n))).length===0,"invalid SchemaVer")}function N(t){t.options=(0,ft.merge)((0,ft.cloneDeep)(ue),t.options||{})}var me=new RegExp("^iglu:[a-zA-Z0-9-_.]+/[a-zA-Z0-9-_]+/[a-zA-Z0-9-_]+/[0-9]+-[0-9]+-[0-9]+$"),di=new RegExp("^[A-Z][a-zA-Z0-9]*$"),li=u.default.object().required().keys({tracker:u.default.string().required().valid(...gt.trackerTemplates),language:u.default.string().required().valid(...gt.languageIds),outpath:u.default.string().required(),namespace:u.default.when("language",{is:"swift",then:u.default.string().regex(di).optional(),otherwise:u.default.forbidden().messages({"any.unknown":"namespace is only supported for 'swift' language"})}),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(me)),repositories:u.default.array().optional().items(u.default.string()),dataStructures:u.default.array().optional().items(u.default.string().regex(me)),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()})})})}),W=t=>{let e=li.validate(t,{abortEarly:!1,convert:!1});if(e.error)throw new nt(e.error.annotate());return t};function mi(t){let e=fe.sha256.create();return e.update(t),e.hex()}function he(t,e){let{vendor:n,name:i,format:o}=x(t);return mi(`${e}-${n}-${i}-${o}`)}function x(t){let e=t.replace("iglu:",""),[n,i,o,r]=e.split("/");return(0,Rt.default)(typeof n=="string"&&typeof i=="string"&&typeof o=="string"&&typeof r=="string",`invalid iglu uri ${t}`),ge(r),{vendor:n,name:i,format:o,version:r}}function Se(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 ve(t){return t.some(e=>e.eventSchema.isEcomTemplateSchema)}function X(t){let[e,n,i]=t.split("-").map(o=>parseInt(o));return{model:e,revision:n,addition:i}}function ye(t,e,n=0){if(t===e&&n!==0)return"patch";let{model:i,revision:o,addition:r}=X(t),{model:a,revision:s,addition:p}=X(e);if(i!==a)return"major";if(o!==s)return"minor";if(r!==p)return"patch";(0,Rt.default)(!1,"SchemaVer checking went wrong")}var ht=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 we(t){return!!Object.hasOwn(t||{},"response")}var _="0.13.4";var Ie=g(require("p-limit")),A=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,Ie.default)(o)}static async create(e){let n=new t(e);return await n.initialize(e),n}static createLazy(e){return new t(e)}async initialize(e){await this.fetchAccessToken(),e.enableSupportForNonDataProductsTier?await Promise.all([this.bulkFetchAllSchemaDraftsVersions(),this.bulkFetchAllSchemaVersions("DEV"),this.bulkFetchAllSchemaVersions("PROD")]):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,St.default)(e,{headers:{"X-API-Key-Id":this.apiKeyId,"X-API-Key":this.apiKey,"X-Snowtype":_}}).json();return this.accessToken=n,n}fetchResource(e){return this.pLimit(async()=>{try{let n=await this.fetchAccessToken();return await(0,St.default)(e,{headers:{Authorization:"Bearer "+n,"X-Snowtype":_}}).json()}catch(n){throw we(n)?new ht(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=he(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,St.default)(i,{headers:{Authorization:"Bearer "+o,"X-Snowtype":_}})}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 C=require("path"),y=require("fs");var _t=g(require("util")),Ut=require("tsx/cjs/api");var F=(()=>{let t="json";return{setFormat:i=>t=i,getFormat:()=>t}})();var Pt=require("@snowplow/snowtype-core");var yt=require("fs");var vt=g(require("assert"));var Ee=require("semver");function Pe(t,e,n){try{let i=(0,yt.readFileSync)(n,{encoding:"utf-8"}),o=JSON.parse(i);return o[t].some(a=>a===e)||o[t].push(e),(0,yt.writeFileSync)(n,Mt(o)),!0}catch(i){return console.error(i),!1}}var gi=(t,e)=>{let{model:n,revision:i,addition:o}=X(t.version),{model:r,revision:a,addition:s}=X(e.version);return(0,vt.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 Ce(t,e,n,i){return(await Promise.all(e.map(async r=>{let{version:a}=x(r),s=await t.fetchDeployments({schema:r,...i&&{deploymentEnv:"PROD"}}),p=fi(s,a,n);p.sort(gi);let c=p.pop();if(!c)return null;let d={previous:r,next:Se(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 Vt(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,vt.default)(!!s,`failed to fetch event spec ${r}`),(0,vt.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 Vt(t,p);return(s.version||0)>a&&(o[r]={previous:a,next:s.version,devOnlySchema:c}),r})),o}function fi(t,e,n){return t.filter(i=>jt(e,i.version)!==1).filter(i=>i.version!==e||i.patchLevel).map(i=>({...i,updateType:ye(i.version,e,i.patchLevel)})).filter(hi(n))}function hi(t){return({updateType:e})=>{switch(t){case"major":return!0;case"minor":return e==="patch"||e==="minor";case"patch":return e==="patch"}}}function jt(t,e){let n=t.replaceAll("-","."),i=e.replaceAll("-",".");return(0,Ee.compare)(n,i)}var De=require("cli-spinner"),S=g(require("chalk"));function Oe(){let t=new De.Spinner;return t.setSpinnerString(18),t}var Si="https://snowplow.io",vi="https://docs.snowplow.io/docs/collecting-data/code-generation/",Y={SUCCESS:"\u2714",LOG:"\u2139",DEBUG:"\u27A4",ERROR:"\u2717",WARN:"\u26A0"},be={LINK:"#9911BB",OPTION:"#9911DD"};function Ae(t){return S.default.hex(be.LINK).bold(t)}function L(t){return S.default.hex(be.OPTION).italic(t)}function wt(t,e){switch(t){case"h1":return S.default.bold.underline(e);default:return S.default.bold(e)}}function ke(){return`
2
+ `);super(a),this.response={statusCode:n,body:r}}};function we(t){return!!Object.hasOwn(t||{},"response")}var _="0.15.0";var Ie=g(require("p-limit")),A=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,Ie.default)(o)}static async create(e){let n=new t(e);return await n.initialize(e),n}static createLazy(e){return new t(e)}async initialize(e){await this.fetchAccessToken(),e.enableSupportForNonDataProductsTier?await Promise.all([this.bulkFetchAllSchemaDraftsVersions(),this.bulkFetchAllSchemaVersions("DEV"),this.bulkFetchAllSchemaVersions("PROD")]):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,St.default)(e,{headers:{"X-API-Key-Id":this.apiKeyId,"X-API-Key":this.apiKey,"X-Snowtype":_}}).json();return this.accessToken=n,n}fetchResource(e){return this.pLimit(async()=>{try{let n=await this.fetchAccessToken();return await(0,St.default)(e,{headers:{Authorization:"Bearer "+n,"X-Snowtype":_}}).json()}catch(n){throw we(n)?new ht(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=he(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,St.default)(i,{headers:{Authorization:"Bearer "+o,"X-Snowtype":_}})}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 C=require("path"),y=require("fs");var _t=g(require("util")),Ut=require("tsx/cjs/api");var F=(()=>{let t="json";return{setFormat:i=>t=i,getFormat:()=>t}})();var Pt=require("@snowplow/snowtype-core");var yt=require("fs");var vt=g(require("assert"));var Ee=require("semver");function Pe(t,e,n){try{let i=(0,yt.readFileSync)(n,{encoding:"utf-8"}),o=JSON.parse(i);return o[t].some(a=>a===e)||o[t].push(e),(0,yt.writeFileSync)(n,Mt(o)),!0}catch(i){return console.error(i),!1}}var gi=(t,e)=>{let{model:n,revision:i,addition:o}=X(t.version),{model:r,revision:a,addition:s}=X(e.version);return(0,vt.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 Ce(t,e,n,i){return(await Promise.all(e.map(async r=>{let{version:a}=x(r),s=await t.fetchDeployments({schema:r,...i&&{deploymentEnv:"PROD"}}),p=fi(s,a,n);p.sort(gi);let c=p.pop();if(!c)return null;let d={previous:r,next:Se(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 Vt(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,vt.default)(!!s,`failed to fetch event spec ${r}`),(0,vt.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 Vt(t,p);return(s.version||0)>a&&(o[r]={previous:a,next:s.version,devOnlySchema:c}),r})),o}function fi(t,e,n){return t.filter(i=>jt(e,i.version)!==1).filter(i=>i.version!==e||i.patchLevel).map(i=>({...i,updateType:ye(i.version,e,i.patchLevel)})).filter(hi(n))}function hi(t){return({updateType:e})=>{switch(t){case"major":return!0;case"minor":return e==="patch"||e==="minor";case"patch":return e==="patch"}}}function jt(t,e){let n=t.replaceAll("-","."),i=e.replaceAll("-",".");return(0,Ee.compare)(n,i)}var De=require("cli-spinner"),S=g(require("chalk"));function Oe(){let t=new De.Spinner;return t.setSpinnerString(18),t}var Si="https://snowplow.io",vi="https://docs.snowplow.io/docs/collecting-data/code-generation/",Y={SUCCESS:"\u2714",LOG:"\u2139",DEBUG:"\u27A4",ERROR:"\u2717",WARN:"\u26A0"},be={LINK:"#9911BB",OPTION:"#9911DD"};function Ae(t){return S.default.hex(be.LINK).bold(t)}function L(t){return S.default.hex(be.OPTION).italic(t)}function wt(t,e){switch(t){case"h1":return S.default.bold.underline(e);default:return S.default.bold(e)}}function ke(){return`
3
3
  ${wt("h1","CLI Help")}
4
4
 
5
5
  For more information visit the Snowplow website ${Ae(Si)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snowplow/snowtype",
3
- "version": "0.13.4",
3
+ "version": "0.15.0",
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.4",
17
+ "@snowplow/snowtype-core": "^0.15.0",
18
18
  "chalk": "^4.1.2",
19
19
  "cli-spinner": "^0.2.10",
20
20
  "dotenv": "^16.3.1",