@snowplow/snowtype 0.8.3 → 0.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";var kn=Object.create;var Kt=Object.defineProperty;var Dn=Object.getOwnPropertyDescriptor;var $n=Object.getOwnPropertyNames;var Fn=Object.getPrototypeOf,Rn=Object.prototype.hasOwnProperty;var Ln=(t,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of $n(e))!Rn.call(t,o)&&o!==n&&Kt(t,o,{get:()=>e[o],enumerable:!(i=Dn(e,o))||i.enumerable});return t};var h=(t,e,n)=>(n=t!=null?kn(Fn(t)):{},Ln(e||!t||!t.__esModule?Kt(n,"default",{value:t,enumerable:!0}):n,t));var wn=h(require("process")),O=require("@commander-js/extra-typings");var A=require("@inquirer/prompts");var jn={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."},Vn="Please report a bug.",S=class extends Error{code;constructor(e,n=""){let i=jn[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")}},U=class extends S{constructor(){super("ConfigAlreadyExists")}},K=class extends S{constructor(){super("ConfigNotExists")}},X=class extends S{constructor(e){super("ConfigInvalid",e)}},Y=class extends S{constructor(e){super("InternalError",e.concat(Vn))}},F=class extends S{constructor(e,n){let i=`Value ${n} is an invalid ${e}.`;super("InvalidOption",i)}},Z=class extends S{constructor(){super("MissingOptions")}},R=class extends S{constructor(){super("AuthError")}},Q=class extends S{constructor(){super("WriteLockFile")}},tt=class extends S{constructor(){super("MissingLockFile")}},et=class extends S{constructor(){super("PatchingNotSupported")}},nt=class extends S{constructor(){super("DevNotAllowed")}};var Xt=h(require("got"));async function Yt({schema:t}){return(await(0,Xt.default)(`https://raw.githubusercontent.com/snowplow/iglu-central/master/schemas/${t.replace("iglu:","")}`)).body}var dt=h(require("got"));var re=require("js-sha256"),Tt=h(require("assert"));var u=h(require("joi")),st=require("@snowplow/snowtype-core");var Ot=h(require("assert"));var _="snowtype.config",it=".js",ot=".ts",rt=".json",Zt=Object.freeze([it,ot,rt]),at=".snowtype-lock.json",Qt="snowplow";var W={"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"}]},te={commands:{generate:{instructions:!1,validations:!1,disallowDevSchemas:!1},update:{maximumBump:"major",regenerateOnUpdate:!1,showOnlyProdUpdates:!1},patch:{regenerateOnPatch:!1}}},ee=["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"],ne="iglu:com.snowplowanalytics.snowplow.ecommerce";var ct=require("lodash");function oe(t){let e=t.split("-");(0,Ot.default)(e.length===3,"invalid SchemaVer"),(0,Ot.default)(e.filter(n=>isNaN(parseInt(n))).length===0,"invalid SchemaVer")}function L(t){t.options=(0,ct.merge)((0,ct.cloneDeep)(te),t.options||{})}var ie=new RegExp("^iglu:[a-zA-Z0-9-_.]+/[a-zA-Z0-9-_]+/[a-zA-Z0-9-_]+/[0-9]+-[0-9]+-[0-9]+$"),Nn=u.default.object().required().keys({tracker:u.default.string().required().valid(...st.trackerTemplates),language:u.default.string().required().valid(...st.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(ie)),dataStructures:u.default.array().optional().items(u.default.string().regex(ie)),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()}),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=Nn.validate(t,{abortEarly:!1,convert:!1});if(e.error)throw new X(e.error.annotate());return t};function Mn(t){let e=re.sha256.create();return e.update(t),e.hex()}function pt(t,e){let{vendor:n,name:i,format:o}=E(t);return Mn(`${e}-${n}-${i}-${o}`)}function E(t){let e=t.replace("iglu:",""),[n,i,o,r]=e.split("/");return(0,Tt.default)(typeof n=="string"&&typeof i=="string"&&typeof o=="string"&&typeof r=="string",`invalid iglu uri ${t}`),oe(r),{vendor:n,name:i,format:o,version:r}}function ae(t,{vendor:e,name:n,format:i,version:o}){let r=t.replace("iglu:",""),[s,a,p,c]=r.split("/");return`iglu:${e||s}/${n||a}/${i||p}/${o||c}`}function se(t){return t.some(e=>e.eventSchema.isEcomTemplateSchema)}function G(t){let[e,n,i]=t.split("-").map(o=>parseInt(o));return{model:e,revision:n,addition:i}}function ce(t,e,n=0){if(t===e&&n!==0)return"patch";let{model:i,revision:o,addition:r}=G(t),{model:s,revision:a,addition:p}=G(e);if(i!==s)return"major";if(o!==a)return"minor";if(r!==p)return"patch";(0,Tt.default)(!1,"SchemaVer checking went wrong")}var ut=class extends Error{response;constructor(e){let n=e.response?.statusCode||0,{method:i,url:o}=e.options,r=e.response?.body||e.message,s=[[n,i,o].filter(Boolean).join(" "),r].filter(Boolean).join(`
|
|
2
|
-
`);super(s),this.response={statusCode:n,body:r}}};function pe(t){return!!Object.hasOwn(t||{},"response")}var V="0.8.
|
|
2
|
+
`);super(s),this.response={statusCode:n,body:r}}};function pe(t){return!!Object.hasOwn(t||{},"response")}var V="0.8.4";var x=class{apiKey;organizationId;accessToken;apiUrl=process.env.SNOWPLOW_CONSOLE_API_URL||"https://console.snowplowanalytics.com/api/msc";constructor({apiKey:e,organizationId:n}){this.apiKey=e,this.organizationId=n}async fetchAccessToken(){if(this.accessToken)return this.accessToken;let e=`${this.apiUrl}/v1/organizations/${this.organizationId}/credentials/v2/token`,{accessToken:n}=await(0,dt.default)(e,{headers:{"X-API-Key":this.apiKey,"X-Snowtype":V}}).json();return this.accessToken=n,n}async fetchResource(e){let n=await this.fetchAccessToken();try{return await(0,dt.default)(e,{headers:{Authorization:"Bearer "+n,"X-Snowtype":V}}).json()}catch(i){throw pe(i)?new ut(i):i}}fetchSchemaVersion({schema:e,env:n="DEV"}){let{version:i}=E(e),o=pt(e,this.organizationId),r=`${this.apiUrl}/v1/organizations/${this.organizationId}/data-structures/v1/${o}/versions/${i}?env=${n}`;return this.fetchResource(r)}fetchSchemaHash({schema:e}){let n=pt(e,this.organizationId),i=`${this.apiUrl}/v1/organizations/${this.organizationId}/data-structures/v1/${n}`;return this.fetchResource(i)}async fetchDeployments({schema:e,deploymentEnv:n}){let i=pt(e,this.organizationId),o=25,r=[],s=!0,a=0,p=c=>`${this.apiUrl}/v1/organizations/${this.organizationId}/data-structures/v1/${i}/deployments?size=${o}&from=${c}${n?`&env=${n}`:""}`;for(;s;){let c=await this.fetchResource(p(a));a+=o,r=r.concat(c),c.length===0&&(s=!1)}return r}fetchEventSpecification({eventSpecificationId:e}){let n=`${this.apiUrl}/v1/organizations/${this.organizationId}/tracking-scenarios/v2/${e}`;return this.fetchResource(n)}async fetchImageVariant({imageId:e,imageVariant:n}){let i=`${this.apiUrl}/v1/organizations/${this.organizationId}/images/v1/${e}/${n}`,o=await this.fetchAccessToken();return(0,dt.default)(i,{headers:{Authorization:"Bearer "+o,"X-Snowtype":V}})}fetchDataProduct({dataProductId:e}){let n=`${this.apiUrl}/v1/organizations/${this.organizationId}/data-products/v1/${e}`;return this.fetchResource(n)}async authenticate(){try{return await this.fetchAccessToken(),!0}catch{return!1}}};var St=require("process"),k=require("path"),v=require("fs");var Lt=h(require("util")),jt=require("tsx/cjs/api");var T=(()=>{let t="json";return{setFormat:i=>t=i,getFormat:()=>t}})();var C=require("@snowplow/snowtype-core");var gt=require("fs"),bt=require("path");var lt=h(require("assert"));var ue=require("semver"),de="snowtype.config.json";function Un(t){(0,gt.writeFileSync)((0,bt.resolve)(process.cwd(),`./${de}`),Dt(t))}function le(t,e){try{let n=(0,gt.readFileSync)((0,bt.resolve)(process.cwd(),`./${de}`),{encoding:"utf-8"}),i=JSON.parse(n);return i[t].some(r=>r===e)||i[t].push(e),Un(i),!0}catch(n){return console.error(n),!1}}var _n=(t,e)=>{let{model:n,revision:i,addition:o}=G(t.version),{model:r,revision:s,addition:a}=G(e.version);return(0,lt.default)(n!==void 0&&i!==void 0&&o!==void 0&&r!==void 0&&s!==void 0&&a!==void 0,`Invalid version number comparing (${t}, ${e})`),n>r?1:n<r?-1:i>s?1:i<s?-1:o>a?1:o<a?-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 ge(t,e,n,i){return(await Promise.all(e.map(async r=>{let{version:s}=E(r),a=await t.fetchDeployments({schema:r,...i&&{deploymentEnv:"PROD"}}),p=Wn(a,s,n);p.sort(_n);let c=p.pop();if(!c)return null;let l={previous:r,next:ae(r,{version:c.version}),nextEnv:c.env};return c.version!==s?{...l,nextReason:"version"}:c.patchLevel>0&&c.env==="DEV"?{...l,nextReason:"patch"}:null}))).flatMap(r=>r===null?[]:[r])}async function kt(t,e){return Promise.all(e.map(async n=>{try{await t.fetchSchemaVersion({schema:n,env:"PROD"})}catch(i){if(i.response?.statusCode===404)try{return await t.fetchSchemaVersion({schema:n,env:"DEV"}),n}catch(o){if(o.response?.statusCode!==404)throw o}}return null})).then(n=>n.flatMap(i=>i!==null?[i]:[]))}async function me(t,e,n){let{eventSpecifications:i}=n,o={};return await Promise.all(e.map(async r=>{let s=i[r];if(!s)return r;let a=(await t.fetchEventSpecification({eventSpecificationId:r})).data[0];(0,lt.default)(!!a,`failed to fetch event spec ${r}`),(0,lt.default)(!!a.version,`event spec with no version ${r}`);let p=[a.event?.source,...a.entities?.tracked?.map(l=>l.source)||[]].flatMap(l=>typeof l=="string"?[l]:[]),c=await kt(t,p);return(a.version||0)>s&&(o[r]={previous:s,next:a.version,devOnlySchema:c}),r})),o}function Wn(t,e,n){return t.filter(i=>zn(e,i.version)!==1).filter(i=>i.version!==e||i.patchLevel).map(i=>({...i,updateType:ce(i.version,e,i.patchLevel)})).filter(Gn(n))}function Gn(t){return({updateType:e})=>{switch(t){case"major":return!0;case"minor":return e==="patch"||e==="minor";case"patch":return e==="patch"}}}function zn(t,e){let n=t.replaceAll("-","."),i=e.replaceAll("-",".");return(0,ue.compare)(n,i)}var he=require("cli-spinner"),f=h(require("chalk"));function Se(){let t=new he.Spinner;return t.setSpinnerString(18),t}var Hn="https://snowplow.io",Bn="https://docs.snowplow.io/docs/collecting-data/code-generation/",z={SUCCESS:"\u2714",LOG:"\u2139",DEBUG:"\u27A4",ERROR:"\u2717",WARN:"\u26A0"},ve={LINK:"#9911BB",OPTION:"#9911DD"};function fe(t){return f.default.hex(ve.LINK).bold(t)}function b(t){return f.default.hex(ve.OPTION).italic(t)}function mt(t,e){switch(t){case"h1":return f.default.bold.underline(e);default:return f.default.bold(e)}}function ye(){return`
|
|
3
3
|
${mt("h1","CLI Help")}
|
|
4
4
|
|
|
5
5
|
For more information visit the Snowplow website ${fe(Hn)}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@snowplow/snowtype",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.4",
|
|
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/",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@commander-js/extra-typings": "^11.1.0",
|
|
15
15
|
"@inquirer/prompts": "^3.3.0",
|
|
16
|
-
"@snowplow/snowtype-core": "^0.8.
|
|
16
|
+
"@snowplow/snowtype-core": "^0.8.4",
|
|
17
17
|
"chalk": "^4.1.2",
|
|
18
18
|
"cli-spinner": "^0.2.10",
|
|
19
19
|
"dotenv": "^16.3.1",
|