@planningcenter/url 3.2.0 → 3.3.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.
package/README.md CHANGED
@@ -24,6 +24,9 @@ pcoUrl("api", { env: "development" });
24
24
 
25
25
  pcoUrl("people", { env: "staging" });
26
26
  // => "https://accounts.planningcenteronline.com"
27
+
28
+ pcoUrl("accounts", { env: "testing" });
29
+ // => "https://accounts-testing.planningcenteronline.com"
27
30
  ```
28
31
 
29
32
  ## `pcoApiUrl` Examples
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type Environment = "production" | "staging" | "development" | "test" | "prototype";
1
+ export type Environment = "production" | "staging" | "testing" | "development" | "test" | "prototype";
2
2
  export type Product = "api" | "accounts" | "calendar" | "check-ins" | "giving" | "groups" | "home" | "login" | "people" | "publishing" | "registrations" | "services";
3
3
  declare const legacy: (env: Environment) => (productName: Product) => string;
4
4
  export default legacy;
@@ -9,4 +9,4 @@ export declare function pcoApiUrl(product: Product, { env, squiggly, }?: {
9
9
  env?: Environment;
10
10
  squiggly?: boolean;
11
11
  }): string;
12
- export declare const inferEnvironment: () => "production" | "staging" | "development" | "prototype";
12
+ export declare const inferEnvironment: () => "production" | "staging" | "testing" | "development" | "prototype";
package/dist/url.js CHANGED
@@ -1,2 +1,2 @@
1
- var n=function(n){return function(t){if(n&&t){var i=function(){return"undefined"!=typeof location&&location&&location.protocol&&"https:"===location.protocol?"https":"http"};switch(n){case"production":return"https://"+t+"."+c();case"staging":return"https://"+t+"-staging."+c();case"development":var r="test";try{r=location.hostname.match(/\pco\.(\w+)$/)[1]}catch(n){"localhost"!==location.hostname&&console.error(location.hostname+" is not a supported dev TLD")}var a=e(t);return i()+"://"+(a?a+".":"")+t+".pco."+r;case"prototype":return"https://"+o()+"."+t+".planningcenter.ninja";case"test":var s=e(t);return i()+"://"+(s?s+".":"")+t+".pco.test";default:return"http://"+t+"."+c()}}}},t=function(){var n=window.location.origin;return n.endsWith("-staging.planningcenteronline.com")||n.endsWith("/staging.planningcenteronline.com")||n.endsWith(".staging.churchcenter.com")||n.endsWith("/staging.churchcenter.com")?"staging":n.endsWith(".planningcenteronline.com")||n.endsWith(".churchcenter.com")||n.endsWith("/churchcenter.com")?"production":n.endsWith(".planningcenter.ninja")||n.endsWith(".churchcenter.ninja")?"prototype":n.endsWith("pco.codes")||n.endsWith("pco.dev")||n.endsWith("pco.test")||n.endsWith("churchcenter.test")?"development":"production"},o=function(){var n,t,o=null==(n=location)||null==(t=n.hostname)?void 0:t.match(/(?:www\.)?(.+)\..+\.planningcenter\.ninja/);return o&&"localhost"!==o[1]?o[1]:"main"},e=function(n){var t,o,e=null==(t=location)||null==(o=t.hostname)?void 0:o.match(/^(.+?)\.(.+?)\.pco\.\w+$/);return e&&e[2]===n?e[1]:null},c=function(){var n=location.hostname.match(/planningcenter(online)?.com/);return null===n?"planningcenteronline.com":n[0]};exports.default=n,exports.inferEnvironment=t,exports.pcoApiUrl=function(o,e){var c,i,r=void 0===e?{}:e,a=r.env,s=void 0===a?t():a,l=r.squiggly,p=void 0===l||l,h=p?"/~api":"";return h+="/"+o+"/v2",n(s)(p?(void 0===c&&(c=1),(i=window.location.hostname.split(".").slice(0,-1*(1+c)))["prototype"===t()?i.length-1:0].replace(/-staging$/,"")):"api")+h},exports.pcoUrl=function(o,e){var c=(void 0===e?{}:e).env,i=void 0===c?t():c;return n(i)(o)};
1
+ var n=function(n){return function(e){if((n=t(n))&&e){var r=function(){return"undefined"!=typeof location&&location&&location.protocol&&"https:"===location.protocol?"https":"http"};switch(n){case"production":return"https://"+e+"."+c();case"staging":return"https://"+e+"-staging."+c();case"testing":return"https://"+e+"-testing."+c();case"development":var a="test";try{a=location.hostname.match(/\pco\.(\w+)$/)[1]}catch(n){"localhost"!==location.hostname&&console.error(location.hostname+" is not a supported dev TLD")}var s=i(e);return r()+"://"+(s?s+".":"")+e+".pco."+a;case"prototype":return"https://"+o()+"."+e+".planningcenter.ninja";case"test":var l=i(e);return r()+"://"+(l?l+".":"")+e+".pco.test";default:return"http://"+e+"."+c()}}}},t=function(n){return"staging"===n&&"testing"===e()?"testing":n},e=function(){var n=window.location.origin;return n.endsWith("-testing.planningcenteronline.com")||n.endsWith("/testing.planningcenteronline.com")||n.endsWith(".testing.churchcenter.com")||n.endsWith("/testing.churchcenter.com")?"testing":n.endsWith("-staging.planningcenteronline.com")||n.endsWith("/staging.planningcenteronline.com")||n.endsWith(".staging.churchcenter.com")||n.endsWith("/staging.churchcenter.com")?"staging":n.endsWith(".planningcenteronline.com")||n.endsWith(".churchcenter.com")||n.endsWith("/churchcenter.com")?"production":n.endsWith(".planningcenter.ninja")||n.endsWith(".churchcenter.ninja")?"prototype":n.endsWith("pco.codes")||n.endsWith("pco.dev")||n.endsWith("pco.test")||n.endsWith("churchcenter.test")?"development":"production"},o=function(){var n,t,e=null==(n=location)||null==(t=n.hostname)?void 0:t.match(/(?:www\.)?(.+)\..+\.planningcenter\.ninja/);return e&&"localhost"!==e[1]?e[1]:"main"},i=function(n){var t,e,o=null==(t=location)||null==(e=t.hostname)?void 0:e.match(/^(.+?)\.(.+?)\.pco\.\w+$/);return o&&o[2]===n?o[1]:null},c=function(){var n=location.hostname.match(/planningcenter(online)?.com/);return null===n?"planningcenteronline.com":n[0]};exports.default=n,exports.inferEnvironment=e,exports.pcoApiUrl=function(t,o){var i,c,r=void 0===o?{}:o,a=r.env,s=void 0===a?e():a,l=r.squiggly,h=void 0===l||l,p=h?"/~api":"";return p+="/"+t+"/v2",n(s)(h?(void 0===i&&(i=1),(c=window.location.hostname.split(".").slice(0,-1*(1+i)))["prototype"===e()?c.length-1:0].replace(/-staging$/,"").replace(/-testing$/,"")):"api")+p},exports.pcoUrl=function(t,o){var i=(void 0===o?{}:o).env,c=void 0===i?e():i;return n(c)(t)};
2
2
  //# sourceMappingURL=url.js.map
package/dist/url.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"url.js","sources":["../index.ts"],"sourcesContent":["export type Environment =\n | \"production\"\n | \"staging\"\n | \"development\"\n | \"test\"\n | \"prototype\"\n\nexport type Product =\n | \"api\"\n | \"accounts\"\n | \"calendar\"\n | \"check-ins\"\n | \"giving\"\n | \"groups\"\n | \"home\"\n | \"login\"\n | \"people\"\n | \"publishing\"\n | \"registrations\"\n | \"services\"\n\nconst legacy = (env: Environment) => (productName: Product) => {\n if (!(env && productName)) return\n\n const getCurrentProtocol = () => {\n if (typeof location !== 'undefined' && location && location.protocol) {\n return location.protocol === 'https:' ? 'https' : 'http'\n }\n return 'http'\n }\n\n switch (env) {\n case \"production\":\n return `https://${productName}.${domain()}`\n case \"staging\":\n return `https://${productName}-staging.${domain()}`\n case \"development\": {\n let tld = \"test\"\n\n try {\n tld = location.hostname.match(/\\pco\\.(\\w+)$/)[1]\n } catch (error) {\n // don't show warning in Topbar's local dev env\n if (location.hostname !== \"localhost\") {\n console.error(`${location.hostname} is not a supported dev TLD`)\n }\n }\n\n const prefix = worktreeName(productName)\n return `${getCurrentProtocol()}://${prefix ? `${prefix}.` : ''}${productName}.pco.${tld}`\n }\n case \"prototype\":\n return `https://${prototypeEnv()}.${productName}.planningcenter.ninja`\n case \"test\": {\n const prefix = worktreeName(productName)\n return `${getCurrentProtocol()}://${prefix ? `${prefix}.` : ''}${productName}.pco.test`\n }\n default:\n return `http://${productName}.${domain()}`\n }\n}\n\nexport default legacy\n\nexport function pcoUrl(\n product: Product,\n { env = inferEnvironment() }: { env?: Environment } = {},\n) {\n return legacy(env)(product)\n}\n\nexport function pcoApiUrl(\n product: Product,\n {\n env = inferEnvironment(),\n squiggly = true,\n }: { env?: Environment; squiggly?: boolean } = {},\n) {\n let path = squiggly ? \"/~api\" : \"\"\n path += `/${product}/v2`\n\n return legacy(env)(squiggly ? inferProduct() : \"api\") + path\n}\n\nexport const inferEnvironment = () => {\n const origin = window.location.origin\n\n if (origin.endsWith(\"-staging.planningcenteronline.com\")) return \"staging\"\n if (origin.endsWith(\"/staging.planningcenteronline.com\")) return \"staging\"\n if (origin.endsWith(\".staging.churchcenter.com\")) return \"staging\"\n if (origin.endsWith(\"/staging.churchcenter.com\")) return \"staging\"\n if (origin.endsWith(\".planningcenteronline.com\")) return \"production\"\n if (origin.endsWith(\".churchcenter.com\")) return \"production\"\n if (origin.endsWith(\"/churchcenter.com\")) return \"production\"\n if (origin.endsWith(\".planningcenter.ninja\")) return \"prototype\"\n if (origin.endsWith(\".churchcenter.ninja\")) return \"prototype\"\n if (origin.endsWith(\"pco.codes\")) return \"development\"\n if (origin.endsWith(\"pco.dev\")) return \"development\"\n if (origin.endsWith(\"pco.test\")) return \"development\"\n if (origin.endsWith(\"churchcenter.test\")) return \"development\"\n\n return \"production\"\n}\n/**\n * If the hostname is a Protonova URL, get the env from the subdomain. Defaults to main.\n * Example: my-cool-change.accounts.planningcenter.ninja -> my-cool-change\n * @returns {string}\n */\nconst prototypeEnv = () => {\n const result = location?.hostname?.match(\n /(?:www\\.)?(.+)\\..+\\.planningcenter\\.ninja/,\n )\n\n if (result && result[1] !== \"localhost\") {\n return result[1]\n }\n\n return \"main\"\n}\n\nconst worktreeName = (productName: string) => {\n const match = location?.hostname?.match(/^(.+?)\\.(.+?)\\.pco\\.\\w+$/)\n if (match && match[2] === productName) return match[1]\n return null\n}\n\nconst domain = () => {\n const result = location.hostname.match(/planningcenter(online)?.com/)\n\n if (result === null) {\n return \"planningcenteronline.com\"\n } else {\n return result[0]\n }\n}\n\nconst extractSubdomainsFrom = (host, tldLength = 1) => {\n return host.split(\".\").slice(0, (1 + tldLength) * -1)\n}\n\nconst inferProduct = () => {\n const subdomains = extractSubdomainsFrom(window.location.hostname)\n\n return subdomains[\n inferEnvironment() === \"prototype\" ? subdomains.length - 1 : 0\n ].replace(/-staging$/, \"\")\n}\n"],"names":["legacy","env","productName","getCurrentProtocol","location","protocol","domain","tld","hostname","match","error","console","prefix","worktreeName","prototypeEnv","inferEnvironment","origin","window","endsWith","_location","_location$hostname","result","_location2","_location2$hostname","product","tldLength","subdomains","_ref2","_temp2","_ref2$env","_ref2$squiggly","squiggly","path","split","slice","length","replace","_temp","_ref$env"],"mappings":"AAqBMA,IAAAA,EAAS,SAACC,GAAqB,OAAA,SAACC,GACpC,GAAMD,GAAOC,EAAb,CAEA,IAAMC,EAAqB,WACzB,MAAwB,oBAAbC,UAA4BA,UAAYA,SAASC,UAC7B,WAAtBD,SAASC,SAAwB,QAEnC,MACR,EAED,OAAQJ,GACN,IAAK,aACH,MAAkBC,WAAAA,MAAeI,IACnC,IAAK,UACH,MAAA,WAAkBJ,EAAuBI,YAAAA,IAC3C,IAAK,cACH,IAAIC,EAAM,OAEV,IACEA,EAAMH,SAASI,SAASC,MAAM,gBAAgB,EAM/C,CALC,MAAOC,GAEmB,cAAtBN,SAASI,UACXG,QAAQD,MAASN,SAASI,SAA1B,8BAEH,CAED,IAAMI,EAASC,EAAaX,GAC5B,OAAUC,IAAV,OAAoCS,EAAYA,EAAY,IAAA,IAAKV,EAAjE,QAAoFK,EAEtF,IAAK,YACH,MAAkBO,WAAAA,IAAkBZ,IAAAA,0BACtC,IAAK,OACH,IAAMU,EAASC,EAAaX,GAC5B,OAAUC,WAA0BS,EAAYA,EAAY,IAAA,IAAKV,EAAjE,YAEF,QACE,gBAAiBA,EAAjB,IAAgCI,IAlCpC,CAoCD,CAvCc,EA+DFS,EAAmB,WAC9B,IAAMC,EAASC,OAAOb,SAASY,OAE/B,OAAIA,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,8BAChBF,EAAOE,SAAS,6BAH6C,UAI7DF,EAAOE,SAAS,8BAChBF,EAAOE,SAAS,sBAChBF,EAAOE,SAAS,qBAFqC,aAGrDF,EAAOE,SAAS,0BAChBF,EAAOE,SAAS,uBADiC,YAEjDF,EAAOE,SAAS,cAChBF,EAAOE,SAAS,YAChBF,EAAOE,SAAS,aAChBF,EAAOE,SAAS,qBAHqB,cAKlC,YACR,EAMKJ,EAAe,WACnB,IAAAK,EAAAC,EAAMC,EAAM,SAAGjB,kBAAHgB,EAAGD,EAAUX,eAAb,EAAGY,EAAoBX,MACjC,6CAGF,OAAIY,GAAwB,cAAdA,EAAO,GACZA,EAAO,GAGT,MACR,EAEKR,EAAe,SAACX,GACpB,IAAAoB,EAAAC,EAAMd,EAAK,SAAGL,kBAAHmB,EAAGD,EAAUd,eAAb,EAAGe,EAAoBd,MAAM,4BACxC,OAAIA,GAASA,EAAM,KAAOP,EAAoBO,EAAM,GAErD,IAAA,EAEKH,EAAS,WACb,IAAMe,EAASjB,SAASI,SAASC,MAAM,+BAEvC,OAAe,OAAXY,EACK,2BAEAA,EAAO,EAEjB,0EA9DCG,KAI+C,IA4DZC,EAK7BC,EAjEyCC,OAAA,IAAAC,EAAA,CAAA,EAF7C3B,EAAAA,EAAAA,EAAAA,IAAAA,OAE+C,IAAA4B,EAFzCd,IAEyCc,EAAAC,EAAAH,EAD/CI,SAAAA,OAAW,IAAAD,KAGTE,EAAOD,EAAW,QAAU,GAGhC,OAFAC,GAAI,IAAQR,EAAZ,MAEOxB,EAAOC,EAAPD,CAAY+B,YAuDgBN,IAAAA,EAAY,IAKzCC,EAAmCT,OAAOb,SAASI,SAJ7CyB,MAAM,KAAKC,MAAM,GAAsB,GAAlB,EAAIT,KAOZ,cAAvBV,IAAqCW,EAAWS,OAAS,EAAI,GAC7DC,QAAQ,YAAa,KAhEwB,OAASJ,CACzD,iBAlBK,SACJR,EADIa,OAEoDC,cAAF,CAAA,EAAED,GAAtDpC,IAAAA,OAAMc,IAAAA,EAAAA,IAAgDuB,EAExD,OAAOtC,EAAOC,EAAPD,CAAYwB,EACpB"}
1
+ {"version":3,"file":"url.js","sources":["../index.ts"],"sourcesContent":["export type Environment =\n | \"production\"\n | \"staging\"\n | \"testing\"\n | \"development\"\n | \"test\"\n | \"prototype\"\n\nexport type Product =\n | \"api\"\n | \"accounts\"\n | \"calendar\"\n | \"check-ins\"\n | \"giving\"\n | \"groups\"\n | \"home\"\n | \"login\"\n | \"people\"\n | \"publishing\"\n | \"registrations\"\n | \"services\"\n\nconst legacy = (env: Environment) => (productName: Product) => {\n env = resolveEnvironment(env)\n if (!(env && productName)) return\n\n const getCurrentProtocol = () => {\n if (typeof location !== 'undefined' && location && location.protocol) {\n return location.protocol === 'https:' ? 'https' : 'http'\n }\n return 'http'\n }\n\n switch (env) {\n case \"production\":\n return `https://${productName}.${domain()}`\n case \"staging\":\n return `https://${productName}-staging.${domain()}`\n case \"testing\":\n return `https://${productName}-testing.${domain()}`\n case \"development\": {\n let tld = \"test\"\n\n try {\n tld = location.hostname.match(/\\pco\\.(\\w+)$/)[1]\n } catch (error) {\n // don't show warning in Topbar's local dev env\n if (location.hostname !== \"localhost\") {\n console.error(`${location.hostname} is not a supported dev TLD`)\n }\n }\n\n const prefix = worktreeName(productName)\n return `${getCurrentProtocol()}://${prefix ? `${prefix}.` : ''}${productName}.pco.${tld}`\n }\n case \"prototype\":\n return `https://${prototypeEnv()}.${productName}.planningcenter.ninja`\n case \"test\": {\n const prefix = worktreeName(productName)\n return `${getCurrentProtocol()}://${prefix ? `${prefix}.` : ''}${productName}.pco.test`\n }\n default:\n return `http://${productName}.${domain()}`\n }\n}\n\nexport default legacy\n\nexport function pcoUrl(\n product: Product,\n { env = inferEnvironment() }: { env?: Environment } = {},\n) {\n return legacy(env)(product)\n}\n\nexport function pcoApiUrl(\n product: Product,\n {\n env = inferEnvironment(),\n squiggly = true,\n }: { env?: Environment; squiggly?: boolean } = {},\n) {\n let path = squiggly ? \"/~api\" : \"\"\n path += `/${product}/v2`\n\n return legacy(env)(squiggly ? inferProduct() : \"api\") + path\n}\n\n// One-way mapping: when running on a testing host, treat an explicit\n// `staging` env as `testing`. This exists so callers that hardcode\n// `env: \"staging\"` (notably topbar, which reads the Rails env) resolve\n// correctly on infra-testing boxes. We intentionally do not map the\n// reverse direction — an explicit `testing` on a staging host should\n// still produce testing URLs.\nconst resolveEnvironment = (env: Environment): Environment => {\n if (env === \"staging\" && inferEnvironment() === \"testing\") return \"testing\"\n return env\n}\n\nexport const inferEnvironment = () => {\n const origin = window.location.origin\n\n if (origin.endsWith(\"-testing.planningcenteronline.com\")) return \"testing\"\n if (origin.endsWith(\"/testing.planningcenteronline.com\")) return \"testing\"\n if (origin.endsWith(\".testing.churchcenter.com\")) return \"testing\"\n if (origin.endsWith(\"/testing.churchcenter.com\")) return \"testing\"\n if (origin.endsWith(\"-staging.planningcenteronline.com\")) return \"staging\"\n if (origin.endsWith(\"/staging.planningcenteronline.com\")) return \"staging\"\n if (origin.endsWith(\".staging.churchcenter.com\")) return \"staging\"\n if (origin.endsWith(\"/staging.churchcenter.com\")) return \"staging\"\n if (origin.endsWith(\".planningcenteronline.com\")) return \"production\"\n if (origin.endsWith(\".churchcenter.com\")) return \"production\"\n if (origin.endsWith(\"/churchcenter.com\")) return \"production\"\n if (origin.endsWith(\".planningcenter.ninja\")) return \"prototype\"\n if (origin.endsWith(\".churchcenter.ninja\")) return \"prototype\"\n if (origin.endsWith(\"pco.codes\")) return \"development\"\n if (origin.endsWith(\"pco.dev\")) return \"development\"\n if (origin.endsWith(\"pco.test\")) return \"development\"\n if (origin.endsWith(\"churchcenter.test\")) return \"development\"\n\n return \"production\"\n}\n/**\n * If the hostname is a Protonova URL, get the env from the subdomain. Defaults to main.\n * Example: my-cool-change.accounts.planningcenter.ninja -> my-cool-change\n * @returns {string}\n */\nconst prototypeEnv = () => {\n const result = location?.hostname?.match(\n /(?:www\\.)?(.+)\\..+\\.planningcenter\\.ninja/,\n )\n\n if (result && result[1] !== \"localhost\") {\n return result[1]\n }\n\n return \"main\"\n}\n\nconst worktreeName = (productName: string) => {\n const match = location?.hostname?.match(/^(.+?)\\.(.+?)\\.pco\\.\\w+$/)\n if (match && match[2] === productName) return match[1]\n return null\n}\n\nconst domain = () => {\n const result = location.hostname.match(/planningcenter(online)?.com/)\n\n if (result === null) {\n return \"planningcenteronline.com\"\n } else {\n return result[0]\n }\n}\n\nconst extractSubdomainsFrom = (host, tldLength = 1) => {\n return host.split(\".\").slice(0, (1 + tldLength) * -1)\n}\n\nconst inferProduct = () => {\n const subdomains = extractSubdomainsFrom(window.location.hostname)\n\n return subdomains[\n inferEnvironment() === \"prototype\" ? subdomains.length - 1 : 0\n ]\n .replace(/-staging$/, \"\")\n .replace(/-testing$/, \"\")\n}\n"],"names":["legacy","env","productName","resolveEnvironment","getCurrentProtocol","location","protocol","domain","tld","hostname","match","error","console","prefix","worktreeName","prototypeEnv","inferEnvironment","origin","window","endsWith","result","_location","_location$hostname","_location2","_location2$hostname","product","_temp2","tldLength","subdomains","_ref2$env","_ref2","squiggly","_ref2$squiggly","path","split","slice","length","replace","_temp","_ref$env"],"mappings":"AAsBMA,IAAAA,EAAS,SAACC,GAAqB,OAAA,SAACC,GAEpC,IADAD,EAAME,EAAmBF,KACZC,EAAb,CAEA,IAAME,EAAqB,WACzB,MAAwB,oBAAbC,UAA4BA,UAAYA,SAASC,UAC7B,WAAtBD,SAASC,SAAwB,QAEnC,MACR,EAED,OAAQL,GACN,IAAK,aACH,iBAAkBC,EAAlB,IAAiCK,IACnC,IAAK,UACH,iBAAkBL,EAAlB,YAAyCK,IAC3C,IAAK,UACH,iBAAkBL,EAAlB,YAAyCK,IAC3C,IAAK,cACH,IAAIC,EAAM,OAEV,IACEA,EAAMH,SAASI,SAASC,MAAM,gBAAgB,EAM/C,CALC,MAAOC,GAEmB,cAAtBN,SAASI,UACXG,QAAQD,MAASN,SAASI,SAA1B,8BAEH,CAED,IAAMI,EAASC,EAAaZ,GAC5B,OAAUE,WAA0BS,EAAYA,EAAY,IAAA,IAAKX,EAAjE,QAAoFM,EAEtF,IAAK,YACH,MAAA,WAAkBO,IAAlB,IAAoCb,EACtC,wBAAA,IAAK,OACH,IAAMW,EAASC,EAAaZ,GAC5B,OAAUE,IAA0BS,OAAAA,EAAYA,EAAN,IAAkB,IAAKX,cAEnE,QACE,gBAAiBA,EAAjB,IAAgCK,IAtCT,CAwC5B,CA1Cc,EAwETJ,EAAqB,SAACF,GAC1B,MAAY,YAARA,GAA4C,YAAvBe,IAAyC,UAC3Df,CACR,EAEYe,EAAmB,WAC9B,IAAMC,EAASC,OAAOb,SAASY,OAE/B,OAAIA,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,8BAChBF,EAAOE,SAAS,6BAH6C,UAI7DF,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,8BAChBF,EAAOE,SAAS,6BAH6C,UAI7DF,EAAOE,SAAS,8BAChBF,EAAOE,SAAS,sBAChBF,EAAOE,SAAS,qBAFqC,aAGrDF,EAAOE,SAAS,0BAChBF,EAAOE,SAAS,uBADiC,YAEjDF,EAAOE,SAAS,cAChBF,EAAOE,SAAS,YAChBF,EAAOE,SAAS,aAChBF,EAAOE,SAAS,qBAHqB,cAKlC,YACR,EAMKJ,EAAe,mBACbK,SAASf,EAAAA,oBAAAgB,EAAUZ,iBAAVa,EAAoBZ,MACjC,6CAGF,OAAIU,GAAwB,cAAdA,EAAO,GACZA,EAAO,GAGT,MACR,EAEKN,EAAe,SAACZ,WACdQ,SAAQL,EAAAA,oBAAAkB,EAAUd,iBAAVe,EAAoBd,MAAM,4BACxC,OAAIA,GAASA,EAAM,KAAOR,EAAoBQ,EAAM,GAErD,IAAA,EAEKH,EAAS,WACb,IAAMa,EAASf,SAASI,SAASC,MAAM,+BAEvC,OAAe,OAAXU,EACK,2BAEAA,EAAO,EAEjB,0EA7ECK,EADcC,OAgFqBC,EAK7BC,eAhFyC,CAAE,EAAAF,EAAAG,EAAAC,EAF/C7B,IAAAA,aAAMe,UACNe,SAAAA,OAAW,IAAAC,KAGTC,EAAOF,EAAW,QAAU,GAGhC,OAFAE,OAAYR,EAAR,MAEGzB,EAAOC,EAAPD,CAAY+B,YAsEgBJ,IAAAA,EAAY,IAKzCC,EAAmCV,OAAOb,SAASI,SAJ7CyB,MAAM,KAAKC,MAAM,GAAsB,GAAlB,EAAIR,KAOZ,cAAvBX,IAAqCY,EAAWQ,OAAS,EAAI,GAE5DC,QAAQ,YAAa,IACrBA,QAAQ,YAAa,KAjFuB,OAASJ,CACzD,0BAjBCR,EADIa,OAEoDC,cAAF,CAAA,EAAED,GAAtDrC,IAAAA,aAAMe,MAER,OAAOhB,EAAOC,EAAPD,CAAYyB,EACpB"}
@@ -1,2 +1,2 @@
1
- const n=n=>t=>{if(!n||!t)return;const e=()=>"undefined"!=typeof location&&location&&location.protocol&&"https:"===location.protocol?"https":"http";switch(n){case"production":return`https://${t}.${r()}`;case"staging":return`https://${t}-staging.${r()}`;case"development":{let n="test";try{n=location.hostname.match(/\pco\.(\w+)$/)[1]}catch(n){"localhost"!==location.hostname&&console.error(`${location.hostname} is not a supported dev TLD`)}const o=i(t);return`${e()}://${o?`${o}.`:""}${t}.pco.${n}`}case"prototype":return`https://${c()}.${t}.planningcenter.ninja`;case"test":{const n=i(t);return`${e()}://${n?`${n}.`:""}${t}.pco.test`}default:return`http://${t}.${r()}`}};function t(t,{env:e=o()}={}){return n(e)(t)}function e(t,{env:e=o(),squiggly:c=!0}={}){let i=c?"/~api":"";return i+=`/${t}/v2`,n(e)(c?s():"api")+i}const o=()=>{const n=window.location.origin;return n.endsWith("-staging.planningcenteronline.com")||n.endsWith("/staging.planningcenteronline.com")||n.endsWith(".staging.churchcenter.com")||n.endsWith("/staging.churchcenter.com")?"staging":n.endsWith(".planningcenteronline.com")||n.endsWith(".churchcenter.com")||n.endsWith("/churchcenter.com")?"production":n.endsWith(".planningcenter.ninja")||n.endsWith(".churchcenter.ninja")?"prototype":n.endsWith("pco.codes")||n.endsWith("pco.dev")||n.endsWith("pco.test")||n.endsWith("churchcenter.test")?"development":"production"},c=()=>{var n,t;const e=null==(n=location)||null==(t=n.hostname)?void 0:t.match(/(?:www\.)?(.+)\..+\.planningcenter\.ninja/);return e&&"localhost"!==e[1]?e[1]:"main"},i=n=>{var t,e;const o=null==(t=location)||null==(e=t.hostname)?void 0:e.match(/^(.+?)\.(.+?)\.pco\.\w+$/);return o&&o[2]===n?o[1]:null},r=()=>{const n=location.hostname.match(/planningcenter(online)?.com/);return null===n?"planningcenteronline.com":n[0]},s=()=>{const n=((n,t=1)=>window.location.hostname.split(".").slice(0,-1*(1+t)))();return n["prototype"===o()?n.length-1:0].replace(/-staging$/,"")};export{n as default,o as inferEnvironment,e as pcoApiUrl,t as pcoUrl};
1
+ const n=n=>t=>{if(!(n=o(n))||!t)return;const e=()=>"undefined"!=typeof location&&location&&location.protocol&&"https:"===location.protocol?"https":"http";switch(n){case"production":return`https://${t}.${r()}`;case"staging":return`https://${t}-staging.${r()}`;case"testing":return`https://${t}-testing.${r()}`;case"development":{let n="test";try{n=location.hostname.match(/\pco\.(\w+)$/)[1]}catch(n){"localhost"!==location.hostname&&console.error(`${location.hostname} is not a supported dev TLD`)}const o=s(t);return`${e()}://${o?`${o}.`:""}${t}.pco.${n}`}case"prototype":return`https://${i()}.${t}.planningcenter.ninja`;case"test":{const n=s(t);return`${e()}://${n?`${n}.`:""}${t}.pco.test`}default:return`http://${t}.${r()}`}};function t(t,{env:e=c()}={}){return n(e)(t)}function e(t,{env:e=c(),squiggly:o=!0}={}){let i=o?"/~api":"";return i+=`/${t}/v2`,n(e)(o?a():"api")+i}const o=n=>"staging"===n&&"testing"===c()?"testing":n,c=()=>{const n=window.location.origin;return n.endsWith("-testing.planningcenteronline.com")||n.endsWith("/testing.planningcenteronline.com")||n.endsWith(".testing.churchcenter.com")||n.endsWith("/testing.churchcenter.com")?"testing":n.endsWith("-staging.planningcenteronline.com")||n.endsWith("/staging.planningcenteronline.com")||n.endsWith(".staging.churchcenter.com")||n.endsWith("/staging.churchcenter.com")?"staging":n.endsWith(".planningcenteronline.com")||n.endsWith(".churchcenter.com")||n.endsWith("/churchcenter.com")?"production":n.endsWith(".planningcenter.ninja")||n.endsWith(".churchcenter.ninja")?"prototype":n.endsWith("pco.codes")||n.endsWith("pco.dev")||n.endsWith("pco.test")||n.endsWith("churchcenter.test")?"development":"production"},i=()=>{var n,t;const e=null==(n=location)||null==(t=n.hostname)?void 0:t.match(/(?:www\.)?(.+)\..+\.planningcenter\.ninja/);return e&&"localhost"!==e[1]?e[1]:"main"},s=n=>{var t,e;const o=null==(t=location)||null==(e=t.hostname)?void 0:e.match(/^(.+?)\.(.+?)\.pco\.\w+$/);return o&&o[2]===n?o[1]:null},r=()=>{const n=location.hostname.match(/planningcenter(online)?.com/);return null===n?"planningcenteronline.com":n[0]},a=()=>{const n=((n,t=1)=>window.location.hostname.split(".").slice(0,-1*(1+t)))();return n["prototype"===c()?n.length-1:0].replace(/-staging$/,"").replace(/-testing$/,"")};export{n as default,c as inferEnvironment,e as pcoApiUrl,t as pcoUrl};
2
2
  //# sourceMappingURL=url.modern.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"url.modern.js","sources":["../index.ts"],"sourcesContent":["export type Environment =\n | \"production\"\n | \"staging\"\n | \"development\"\n | \"test\"\n | \"prototype\"\n\nexport type Product =\n | \"api\"\n | \"accounts\"\n | \"calendar\"\n | \"check-ins\"\n | \"giving\"\n | \"groups\"\n | \"home\"\n | \"login\"\n | \"people\"\n | \"publishing\"\n | \"registrations\"\n | \"services\"\n\nconst legacy = (env: Environment) => (productName: Product) => {\n if (!(env && productName)) return\n\n const getCurrentProtocol = () => {\n if (typeof location !== 'undefined' && location && location.protocol) {\n return location.protocol === 'https:' ? 'https' : 'http'\n }\n return 'http'\n }\n\n switch (env) {\n case \"production\":\n return `https://${productName}.${domain()}`\n case \"staging\":\n return `https://${productName}-staging.${domain()}`\n case \"development\": {\n let tld = \"test\"\n\n try {\n tld = location.hostname.match(/\\pco\\.(\\w+)$/)[1]\n } catch (error) {\n // don't show warning in Topbar's local dev env\n if (location.hostname !== \"localhost\") {\n console.error(`${location.hostname} is not a supported dev TLD`)\n }\n }\n\n const prefix = worktreeName(productName)\n return `${getCurrentProtocol()}://${prefix ? `${prefix}.` : ''}${productName}.pco.${tld}`\n }\n case \"prototype\":\n return `https://${prototypeEnv()}.${productName}.planningcenter.ninja`\n case \"test\": {\n const prefix = worktreeName(productName)\n return `${getCurrentProtocol()}://${prefix ? `${prefix}.` : ''}${productName}.pco.test`\n }\n default:\n return `http://${productName}.${domain()}`\n }\n}\n\nexport default legacy\n\nexport function pcoUrl(\n product: Product,\n { env = inferEnvironment() }: { env?: Environment } = {},\n) {\n return legacy(env)(product)\n}\n\nexport function pcoApiUrl(\n product: Product,\n {\n env = inferEnvironment(),\n squiggly = true,\n }: { env?: Environment; squiggly?: boolean } = {},\n) {\n let path = squiggly ? \"/~api\" : \"\"\n path += `/${product}/v2`\n\n return legacy(env)(squiggly ? inferProduct() : \"api\") + path\n}\n\nexport const inferEnvironment = () => {\n const origin = window.location.origin\n\n if (origin.endsWith(\"-staging.planningcenteronline.com\")) return \"staging\"\n if (origin.endsWith(\"/staging.planningcenteronline.com\")) return \"staging\"\n if (origin.endsWith(\".staging.churchcenter.com\")) return \"staging\"\n if (origin.endsWith(\"/staging.churchcenter.com\")) return \"staging\"\n if (origin.endsWith(\".planningcenteronline.com\")) return \"production\"\n if (origin.endsWith(\".churchcenter.com\")) return \"production\"\n if (origin.endsWith(\"/churchcenter.com\")) return \"production\"\n if (origin.endsWith(\".planningcenter.ninja\")) return \"prototype\"\n if (origin.endsWith(\".churchcenter.ninja\")) return \"prototype\"\n if (origin.endsWith(\"pco.codes\")) return \"development\"\n if (origin.endsWith(\"pco.dev\")) return \"development\"\n if (origin.endsWith(\"pco.test\")) return \"development\"\n if (origin.endsWith(\"churchcenter.test\")) return \"development\"\n\n return \"production\"\n}\n/**\n * If the hostname is a Protonova URL, get the env from the subdomain. Defaults to main.\n * Example: my-cool-change.accounts.planningcenter.ninja -> my-cool-change\n * @returns {string}\n */\nconst prototypeEnv = () => {\n const result = location?.hostname?.match(\n /(?:www\\.)?(.+)\\..+\\.planningcenter\\.ninja/,\n )\n\n if (result && result[1] !== \"localhost\") {\n return result[1]\n }\n\n return \"main\"\n}\n\nconst worktreeName = (productName: string) => {\n const match = location?.hostname?.match(/^(.+?)\\.(.+?)\\.pco\\.\\w+$/)\n if (match && match[2] === productName) return match[1]\n return null\n}\n\nconst domain = () => {\n const result = location.hostname.match(/planningcenter(online)?.com/)\n\n if (result === null) {\n return \"planningcenteronline.com\"\n } else {\n return result[0]\n }\n}\n\nconst extractSubdomainsFrom = (host, tldLength = 1) => {\n return host.split(\".\").slice(0, (1 + tldLength) * -1)\n}\n\nconst inferProduct = () => {\n const subdomains = extractSubdomainsFrom(window.location.hostname)\n\n return subdomains[\n inferEnvironment() === \"prototype\" ? subdomains.length - 1 : 0\n ].replace(/-staging$/, \"\")\n}\n"],"names":["legacy","env","productName","getCurrentProtocol","location","protocol","domain","tld","hostname","match","error","console","prefix","worktreeName","prototypeEnv","pcoUrl","product","inferEnvironment","pcoApiUrl","squiggly","path","inferProduct","origin","window","endsWith","_location","_location$hostname","result","_location2","_location2$hostname","subdomains","host","tldLength","split","slice","extractSubdomainsFrom","length","replace"],"mappings":"AAqBMA,MAAAA,EAAUC,GAAsBC,IACpC,IAAMD,IAAOC,EAAc,OAE3B,MAAMC,EAAqB,IACD,oBAAbC,UAA4BA,UAAYA,SAASC,UAC7B,WAAtBD,SAASC,SAAwB,QAEnC,OAGT,OAAQJ,GACN,IAAK,aACH,iBAAkBC,KAAeI,MACnC,IAAK,UACH,iBAAkBJ,aAAuBI,MAC3C,IAAK,cAAe,CAClB,IAAIC,EAAM,OAEV,IACEA,EAAMH,SAASI,SAASC,MAAM,gBAAgB,EAM/C,CALC,MAAOC,GAEmB,cAAtBN,SAASI,UACXG,QAAQD,MAAM,GAAGN,SAASI,sCAE7B,CAED,MAAMI,EAASC,EAAaX,GAC5B,MAAO,GAAGC,SAA0BS,EAAY,GAAAA,KAAY,KAAKV,SAAmBK,GACrF,CACD,IAAK,YACH,iBAAkBO,OAAkBZ,yBACtC,IAAK,OAAQ,CACX,MAAMU,EAASC,EAAaX,GAC5B,SAAUC,SAA0BS,EAAS,GAAGA,KAAY,KAAKV,YAClE,CACD,QACE,gBAAiBA,KAAeI,MA3BpC,EAiCcS,SAAAA,EACdC,GACAf,IAAEA,EAAMgB,KAA8C,CAFlD,GAIJ,OAAOjB,EAAOC,EAAPD,CAAYgB,EACpB,CAEe,SAAAE,EACdF,GACAf,IACEA,EAAMgB,IADRE,SAEEA,GAAW,GACkC,CALjC,GAOd,IAAIC,EAAOD,EAAW,QAAU,GAGhC,OAFAC,GAAQ,IAAIJ,OAELhB,EAAOC,EAAPD,CAAYmB,EAAWE,IAAiB,OAASD,CACzD,CAEYH,MAAAA,EAAmB,KAC9B,MAAMK,EAASC,OAAOnB,SAASkB,OAE/B,OAAIA,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,8BAChBF,EAAOE,SAAS,6BAH6C,UAI7DF,EAAOE,SAAS,8BAChBF,EAAOE,SAAS,sBAChBF,EAAOE,SAAS,qBAFqC,aAGrDF,EAAOE,SAAS,0BAChBF,EAAOE,SAAS,uBADiC,YAEjDF,EAAOE,SAAS,cAChBF,EAAOE,SAAS,YAChBF,EAAOE,SAAS,aAChBF,EAAOE,SAAS,qBAHqB,cAKlC,cAOHV,EAAe,KACnB,IAAAW,EAAAC,EAAA,MAAMC,EAAM,SAAGvB,kBAAHsB,EAAGD,EAAUjB,eAAb,EAAGkB,EAAoBjB,MACjC,6CAGF,OAAIkB,GAAwB,cAAdA,EAAO,GACZA,EAAO,GAGT,QAGHd,EAAgBX,IAAuB,IAAA0B,EAAAC,EAC3C,MAAMpB,SAAQL,EAAAA,WAAA,SAAAwB,EAAUpB,iBAAVqB,EAAoBpB,MAAM,4BACxC,OAAIA,GAASA,EAAM,KAAOP,EAAoBO,EAAM,GAC7C,MAGHH,EAAS,KACb,MAAMqB,EAASvB,SAASI,SAASC,MAAM,+BAEvC,OAAe,OAAXkB,EACK,2BAEAA,EAAO,EACf,EAOGN,EAAe,KACnB,MAAMS,EALsB,EAACC,EAAMC,EAAY,IAKNT,OAAOnB,SAASI,SAJ7CyB,MAAM,KAAKC,MAAM,GAAsB,GAAlB,EAAIF,IAIlBG,GAEnB,OAAOL,EACkB,cAAvBb,IAAqCa,EAAWM,OAAS,EAAI,GAC7DC,QAAQ,YAAa,GAFhB"}
1
+ {"version":3,"file":"url.modern.js","sources":["../index.ts"],"sourcesContent":["export type Environment =\n | \"production\"\n | \"staging\"\n | \"testing\"\n | \"development\"\n | \"test\"\n | \"prototype\"\n\nexport type Product =\n | \"api\"\n | \"accounts\"\n | \"calendar\"\n | \"check-ins\"\n | \"giving\"\n | \"groups\"\n | \"home\"\n | \"login\"\n | \"people\"\n | \"publishing\"\n | \"registrations\"\n | \"services\"\n\nconst legacy = (env: Environment) => (productName: Product) => {\n env = resolveEnvironment(env)\n if (!(env && productName)) return\n\n const getCurrentProtocol = () => {\n if (typeof location !== 'undefined' && location && location.protocol) {\n return location.protocol === 'https:' ? 'https' : 'http'\n }\n return 'http'\n }\n\n switch (env) {\n case \"production\":\n return `https://${productName}.${domain()}`\n case \"staging\":\n return `https://${productName}-staging.${domain()}`\n case \"testing\":\n return `https://${productName}-testing.${domain()}`\n case \"development\": {\n let tld = \"test\"\n\n try {\n tld = location.hostname.match(/\\pco\\.(\\w+)$/)[1]\n } catch (error) {\n // don't show warning in Topbar's local dev env\n if (location.hostname !== \"localhost\") {\n console.error(`${location.hostname} is not a supported dev TLD`)\n }\n }\n\n const prefix = worktreeName(productName)\n return `${getCurrentProtocol()}://${prefix ? `${prefix}.` : ''}${productName}.pco.${tld}`\n }\n case \"prototype\":\n return `https://${prototypeEnv()}.${productName}.planningcenter.ninja`\n case \"test\": {\n const prefix = worktreeName(productName)\n return `${getCurrentProtocol()}://${prefix ? `${prefix}.` : ''}${productName}.pco.test`\n }\n default:\n return `http://${productName}.${domain()}`\n }\n}\n\nexport default legacy\n\nexport function pcoUrl(\n product: Product,\n { env = inferEnvironment() }: { env?: Environment } = {},\n) {\n return legacy(env)(product)\n}\n\nexport function pcoApiUrl(\n product: Product,\n {\n env = inferEnvironment(),\n squiggly = true,\n }: { env?: Environment; squiggly?: boolean } = {},\n) {\n let path = squiggly ? \"/~api\" : \"\"\n path += `/${product}/v2`\n\n return legacy(env)(squiggly ? inferProduct() : \"api\") + path\n}\n\n// One-way mapping: when running on a testing host, treat an explicit\n// `staging` env as `testing`. This exists so callers that hardcode\n// `env: \"staging\"` (notably topbar, which reads the Rails env) resolve\n// correctly on infra-testing boxes. We intentionally do not map the\n// reverse direction — an explicit `testing` on a staging host should\n// still produce testing URLs.\nconst resolveEnvironment = (env: Environment): Environment => {\n if (env === \"staging\" && inferEnvironment() === \"testing\") return \"testing\"\n return env\n}\n\nexport const inferEnvironment = () => {\n const origin = window.location.origin\n\n if (origin.endsWith(\"-testing.planningcenteronline.com\")) return \"testing\"\n if (origin.endsWith(\"/testing.planningcenteronline.com\")) return \"testing\"\n if (origin.endsWith(\".testing.churchcenter.com\")) return \"testing\"\n if (origin.endsWith(\"/testing.churchcenter.com\")) return \"testing\"\n if (origin.endsWith(\"-staging.planningcenteronline.com\")) return \"staging\"\n if (origin.endsWith(\"/staging.planningcenteronline.com\")) return \"staging\"\n if (origin.endsWith(\".staging.churchcenter.com\")) return \"staging\"\n if (origin.endsWith(\"/staging.churchcenter.com\")) return \"staging\"\n if (origin.endsWith(\".planningcenteronline.com\")) return \"production\"\n if (origin.endsWith(\".churchcenter.com\")) return \"production\"\n if (origin.endsWith(\"/churchcenter.com\")) return \"production\"\n if (origin.endsWith(\".planningcenter.ninja\")) return \"prototype\"\n if (origin.endsWith(\".churchcenter.ninja\")) return \"prototype\"\n if (origin.endsWith(\"pco.codes\")) return \"development\"\n if (origin.endsWith(\"pco.dev\")) return \"development\"\n if (origin.endsWith(\"pco.test\")) return \"development\"\n if (origin.endsWith(\"churchcenter.test\")) return \"development\"\n\n return \"production\"\n}\n/**\n * If the hostname is a Protonova URL, get the env from the subdomain. Defaults to main.\n * Example: my-cool-change.accounts.planningcenter.ninja -> my-cool-change\n * @returns {string}\n */\nconst prototypeEnv = () => {\n const result = location?.hostname?.match(\n /(?:www\\.)?(.+)\\..+\\.planningcenter\\.ninja/,\n )\n\n if (result && result[1] !== \"localhost\") {\n return result[1]\n }\n\n return \"main\"\n}\n\nconst worktreeName = (productName: string) => {\n const match = location?.hostname?.match(/^(.+?)\\.(.+?)\\.pco\\.\\w+$/)\n if (match && match[2] === productName) return match[1]\n return null\n}\n\nconst domain = () => {\n const result = location.hostname.match(/planningcenter(online)?.com/)\n\n if (result === null) {\n return \"planningcenteronline.com\"\n } else {\n return result[0]\n }\n}\n\nconst extractSubdomainsFrom = (host, tldLength = 1) => {\n return host.split(\".\").slice(0, (1 + tldLength) * -1)\n}\n\nconst inferProduct = () => {\n const subdomains = extractSubdomainsFrom(window.location.hostname)\n\n return subdomains[\n inferEnvironment() === \"prototype\" ? subdomains.length - 1 : 0\n ]\n .replace(/-staging$/, \"\")\n .replace(/-testing$/, \"\")\n}\n"],"names":["legacy","env","productName","resolveEnvironment","getCurrentProtocol","location","protocol","domain","tld","hostname","match","error","console","prefix","worktreeName","prototypeEnv","pcoUrl","product","inferEnvironment","pcoApiUrl","squiggly","path","inferProduct","origin","window","endsWith","_location","_location$hostname","result","_location2","_location2$hostname","subdomains","host","tldLength","split","slice","extractSubdomainsFrom","length","replace"],"mappings":"AAsBMA,MAAAA,EAAUC,GAAsBC,IAEpC,KADAD,EAAME,EAAmBF,MACZC,EAAc,OAE3B,MAAME,EAAqB,IACD,oBAAbC,UAA4BA,UAAYA,SAASC,UAC7B,WAAtBD,SAASC,SAAwB,QAEnC,OAGT,OAAQL,GACN,IAAK,aACH,iBAAkBC,KAAeK,MACnC,IAAK,UACH,iBAAkBL,aAAuBK,MAC3C,IAAK,UACH,iBAAkBL,aAAuBK,MAC3C,IAAK,cAAe,CAClB,IAAIC,EAAM,OAEV,IACEA,EAAMH,SAASI,SAASC,MAAM,gBAAgB,EAM/C,CALC,MAAOC,GAEmB,cAAtBN,SAASI,UACXG,QAAQD,MAAM,GAAGN,SAASI,sCAE7B,CAED,MAAMI,EAASC,EAAaZ,GAC5B,MAAO,GAAGE,SAA0BS,EAAY,GAAAA,KAAY,KAAKX,SAAmBM,GACrF,CACD,IAAK,YACH,iBAAkBO,OAAkBb,yBACtC,IAAK,OAAQ,CACX,MAAMW,EAASC,EAAaZ,GAC5B,SAAUE,SAA0BS,EAAS,GAAGA,KAAY,KAAKX,YAClE,CACD,QACE,gBAAiBA,KAAeK,MA7BpC,EAmCcS,SAAAA,EACdC,GACAhB,IAAEA,EAAMiB,KAA8C,CAAA,GAEtD,OAAOlB,EAAOC,EAAPD,CAAYiB,EACpB,CAEeE,SAAAA,EACdF,GACAhB,IACEA,EAAMiB,IADRE,SAEEA,GAAW,GACkC,CALjC,GAOd,IAAIC,EAAOD,EAAW,QAAU,GAGhC,OAFAC,GAAQ,IAAIJ,OAELjB,EAAOC,EAAPD,CAAYoB,EAAWE,IAAiB,OAASD,CACzD,CAQD,MAAMlB,EAAsBF,GACd,YAARA,GAA4C,YAAvBiB,IAAyC,UAC3DjB,EAGIiB,EAAmB,KAC9B,MAAMK,EAASC,OAAOnB,SAASkB,OAE/B,OAAIA,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,8BAChBF,EAAOE,SAAS,6BAH6C,UAI7DF,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,8BAChBF,EAAOE,SAAS,6BAH6C,UAI7DF,EAAOE,SAAS,8BAChBF,EAAOE,SAAS,sBAChBF,EAAOE,SAAS,qBAFqC,aAGrDF,EAAOE,SAAS,0BAChBF,EAAOE,SAAS,uBADiC,YAEjDF,EAAOE,SAAS,cAChBF,EAAOE,SAAS,YAChBF,EAAOE,SAAS,aAChBF,EAAOE,SAAS,qBAHqB,cAKlC,cAOHV,EAAe,KAAK,IAAAW,EAAAC,EACxB,MAAMC,EAAM,SAAGvB,WAAH,OAAAsB,EAAGD,EAAUjB,eAAb,EAAGkB,EAAoBjB,MACjC,6CAGF,OAAIkB,GAAwB,cAAdA,EAAO,GACZA,EAAO,GAGT,QAGHd,EAAgBZ,YACpB,MAAMQ,SAAQL,EAAAA,oBAAAwB,EAAUpB,iBAAVqB,EAAoBpB,MAAM,4BACxC,OAAIA,GAASA,EAAM,KAAOR,EAAoBQ,EAAM,GAC7C,MAGHH,EAAS,KACb,MAAMqB,EAASvB,SAASI,SAASC,MAAM,+BAEvC,OAAe,OAAXkB,EACK,2BAEAA,EAAO,EACf,EAOGN,EAAe,KACnB,MAAMS,EALsB,EAACC,EAAMC,EAAY,IAKNT,OAAOnB,SAASI,SAJ7CyB,MAAM,KAAKC,MAAM,GAAsB,GAAlB,EAAIF,IAIlBG,GAEnB,OAAOL,EACkB,cAAvBb,IAAqCa,EAAWM,OAAS,EAAI,GAE5DC,QAAQ,YAAa,IACrBA,QAAQ,YAAa,GAJjB"}
@@ -1,2 +1,2 @@
1
- var n=function(n){return function(t){if(n&&t){var e=function(){return"undefined"!=typeof location&&location&&location.protocol&&"https:"===location.protocol?"https":"http"};switch(n){case"production":return"https://"+t+"."+r();case"staging":return"https://"+t+"-staging."+r();case"development":var o="test";try{o=location.hostname.match(/\pco\.(\w+)$/)[1]}catch(n){"localhost"!==location.hostname&&console.error(location.hostname+" is not a supported dev TLD")}var a=i(t);return e()+"://"+(a?a+".":"")+t+".pco."+o;case"prototype":return"https://"+c()+"."+t+".planningcenter.ninja";case"test":var s=i(t);return e()+"://"+(s?s+".":"")+t+".pco.test";default:return"http://"+t+"."+r()}}}};function t(t,e){var c=(void 0===e?{}:e).env,i=void 0===c?o():c;return n(i)(t)}function e(t,e){var c=void 0===e?{}:e,i=c.env,r=void 0===i?o():i,s=c.squiggly,l=void 0===s||s,h=l?"/~api":"";return h+="/"+t+"/v2",n(r)(l?a():"api")+h}var o=function(){var n=window.location.origin;return n.endsWith("-staging.planningcenteronline.com")||n.endsWith("/staging.planningcenteronline.com")||n.endsWith(".staging.churchcenter.com")||n.endsWith("/staging.churchcenter.com")?"staging":n.endsWith(".planningcenteronline.com")||n.endsWith(".churchcenter.com")||n.endsWith("/churchcenter.com")?"production":n.endsWith(".planningcenter.ninja")||n.endsWith(".churchcenter.ninja")?"prototype":n.endsWith("pco.codes")||n.endsWith("pco.dev")||n.endsWith("pco.test")||n.endsWith("churchcenter.test")?"development":"production"},c=function(){var n,t,e=null==(n=location)||null==(t=n.hostname)?void 0:t.match(/(?:www\.)?(.+)\..+\.planningcenter\.ninja/);return e&&"localhost"!==e[1]?e[1]:"main"},i=function(n){var t,e,o=null==(t=location)||null==(e=t.hostname)?void 0:e.match(/^(.+?)\.(.+?)\.pco\.\w+$/);return o&&o[2]===n?o[1]:null},r=function(){var n=location.hostname.match(/planningcenter(online)?.com/);return null===n?"planningcenteronline.com":n[0]},a=function(){var n,t=(void 0===n&&(n=1),window.location.hostname.split(".").slice(0,-1*(1+n)));return t["prototype"===o()?t.length-1:0].replace(/-staging$/,"")};export{n as default,o as inferEnvironment,e as pcoApiUrl,t as pcoUrl};
1
+ var n=function(n){return function(t){if((n=o(n))&&t){var e=function(){return"undefined"!=typeof location&&location&&location.protocol&&"https:"===location.protocol?"https":"http"};switch(n){case"production":return"https://"+t+"."+a();case"staging":return"https://"+t+"-staging."+a();case"testing":return"https://"+t+"-testing."+a();case"development":var i="test";try{i=location.hostname.match(/\pco\.(\w+)$/)[1]}catch(n){"localhost"!==location.hostname&&console.error(location.hostname+" is not a supported dev TLD")}var s=r(t);return e()+"://"+(s?s+".":"")+t+".pco."+i;case"prototype":return"https://"+c()+"."+t+".planningcenter.ninja";case"test":var l=r(t);return e()+"://"+(l?l+".":"")+t+".pco.test";default:return"http://"+t+"."+a()}}}};function t(t,e){var o=(void 0===e?{}:e).env,c=void 0===o?i():o;return n(c)(t)}function e(t,e){var o=void 0===e?{}:e,c=o.env,r=void 0===c?i():c,a=o.squiggly,l=void 0===a||a,h=l?"/~api":"";return h+="/"+t+"/v2",n(r)(l?s():"api")+h}var o=function(n){return"staging"===n&&"testing"===i()?"testing":n},i=function(){var n=window.location.origin;return n.endsWith("-testing.planningcenteronline.com")||n.endsWith("/testing.planningcenteronline.com")||n.endsWith(".testing.churchcenter.com")||n.endsWith("/testing.churchcenter.com")?"testing":n.endsWith("-staging.planningcenteronline.com")||n.endsWith("/staging.planningcenteronline.com")||n.endsWith(".staging.churchcenter.com")||n.endsWith("/staging.churchcenter.com")?"staging":n.endsWith(".planningcenteronline.com")||n.endsWith(".churchcenter.com")||n.endsWith("/churchcenter.com")?"production":n.endsWith(".planningcenter.ninja")||n.endsWith(".churchcenter.ninja")?"prototype":n.endsWith("pco.codes")||n.endsWith("pco.dev")||n.endsWith("pco.test")||n.endsWith("churchcenter.test")?"development":"production"},c=function(){var n,t,e=null==(n=location)||null==(t=n.hostname)?void 0:t.match(/(?:www\.)?(.+)\..+\.planningcenter\.ninja/);return e&&"localhost"!==e[1]?e[1]:"main"},r=function(n){var t,e,o=null==(t=location)||null==(e=t.hostname)?void 0:e.match(/^(.+?)\.(.+?)\.pco\.\w+$/);return o&&o[2]===n?o[1]:null},a=function(){var n=location.hostname.match(/planningcenter(online)?.com/);return null===n?"planningcenteronline.com":n[0]},s=function(){var n,t=(void 0===n&&(n=1),window.location.hostname.split(".").slice(0,-1*(1+n)));return t["prototype"===i()?t.length-1:0].replace(/-staging$/,"").replace(/-testing$/,"")};export{n as default,i as inferEnvironment,e as pcoApiUrl,t as pcoUrl};
2
2
  //# sourceMappingURL=url.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"url.module.js","sources":["../index.ts"],"sourcesContent":["export type Environment =\n | \"production\"\n | \"staging\"\n | \"development\"\n | \"test\"\n | \"prototype\"\n\nexport type Product =\n | \"api\"\n | \"accounts\"\n | \"calendar\"\n | \"check-ins\"\n | \"giving\"\n | \"groups\"\n | \"home\"\n | \"login\"\n | \"people\"\n | \"publishing\"\n | \"registrations\"\n | \"services\"\n\nconst legacy = (env: Environment) => (productName: Product) => {\n if (!(env && productName)) return\n\n const getCurrentProtocol = () => {\n if (typeof location !== 'undefined' && location && location.protocol) {\n return location.protocol === 'https:' ? 'https' : 'http'\n }\n return 'http'\n }\n\n switch (env) {\n case \"production\":\n return `https://${productName}.${domain()}`\n case \"staging\":\n return `https://${productName}-staging.${domain()}`\n case \"development\": {\n let tld = \"test\"\n\n try {\n tld = location.hostname.match(/\\pco\\.(\\w+)$/)[1]\n } catch (error) {\n // don't show warning in Topbar's local dev env\n if (location.hostname !== \"localhost\") {\n console.error(`${location.hostname} is not a supported dev TLD`)\n }\n }\n\n const prefix = worktreeName(productName)\n return `${getCurrentProtocol()}://${prefix ? `${prefix}.` : ''}${productName}.pco.${tld}`\n }\n case \"prototype\":\n return `https://${prototypeEnv()}.${productName}.planningcenter.ninja`\n case \"test\": {\n const prefix = worktreeName(productName)\n return `${getCurrentProtocol()}://${prefix ? `${prefix}.` : ''}${productName}.pco.test`\n }\n default:\n return `http://${productName}.${domain()}`\n }\n}\n\nexport default legacy\n\nexport function pcoUrl(\n product: Product,\n { env = inferEnvironment() }: { env?: Environment } = {},\n) {\n return legacy(env)(product)\n}\n\nexport function pcoApiUrl(\n product: Product,\n {\n env = inferEnvironment(),\n squiggly = true,\n }: { env?: Environment; squiggly?: boolean } = {},\n) {\n let path = squiggly ? \"/~api\" : \"\"\n path += `/${product}/v2`\n\n return legacy(env)(squiggly ? inferProduct() : \"api\") + path\n}\n\nexport const inferEnvironment = () => {\n const origin = window.location.origin\n\n if (origin.endsWith(\"-staging.planningcenteronline.com\")) return \"staging\"\n if (origin.endsWith(\"/staging.planningcenteronline.com\")) return \"staging\"\n if (origin.endsWith(\".staging.churchcenter.com\")) return \"staging\"\n if (origin.endsWith(\"/staging.churchcenter.com\")) return \"staging\"\n if (origin.endsWith(\".planningcenteronline.com\")) return \"production\"\n if (origin.endsWith(\".churchcenter.com\")) return \"production\"\n if (origin.endsWith(\"/churchcenter.com\")) return \"production\"\n if (origin.endsWith(\".planningcenter.ninja\")) return \"prototype\"\n if (origin.endsWith(\".churchcenter.ninja\")) return \"prototype\"\n if (origin.endsWith(\"pco.codes\")) return \"development\"\n if (origin.endsWith(\"pco.dev\")) return \"development\"\n if (origin.endsWith(\"pco.test\")) return \"development\"\n if (origin.endsWith(\"churchcenter.test\")) return \"development\"\n\n return \"production\"\n}\n/**\n * If the hostname is a Protonova URL, get the env from the subdomain. Defaults to main.\n * Example: my-cool-change.accounts.planningcenter.ninja -> my-cool-change\n * @returns {string}\n */\nconst prototypeEnv = () => {\n const result = location?.hostname?.match(\n /(?:www\\.)?(.+)\\..+\\.planningcenter\\.ninja/,\n )\n\n if (result && result[1] !== \"localhost\") {\n return result[1]\n }\n\n return \"main\"\n}\n\nconst worktreeName = (productName: string) => {\n const match = location?.hostname?.match(/^(.+?)\\.(.+?)\\.pco\\.\\w+$/)\n if (match && match[2] === productName) return match[1]\n return null\n}\n\nconst domain = () => {\n const result = location.hostname.match(/planningcenter(online)?.com/)\n\n if (result === null) {\n return \"planningcenteronline.com\"\n } else {\n return result[0]\n }\n}\n\nconst extractSubdomainsFrom = (host, tldLength = 1) => {\n return host.split(\".\").slice(0, (1 + tldLength) * -1)\n}\n\nconst inferProduct = () => {\n const subdomains = extractSubdomainsFrom(window.location.hostname)\n\n return subdomains[\n inferEnvironment() === \"prototype\" ? subdomains.length - 1 : 0\n ].replace(/-staging$/, \"\")\n}\n"],"names":["legacy","env","productName","getCurrentProtocol","location","protocol","domain","tld","hostname","match","error","console","prefix","worktreeName","prototypeEnv","pcoUrl","product","_temp","_ref$env","inferEnvironment","pcoApiUrl","_ref2","_temp2","_ref2$env","_ref2$squiggly","squiggly","path","inferProduct","origin","window","endsWith","_location","_location$hostname","result","_location2","_location2$hostname","tldLength","subdomains","split","slice","length","replace"],"mappings":"AAqBMA,IAAAA,EAAS,SAACC,GAAqB,OAAA,SAACC,GACpC,GAAMD,GAAOC,EAAb,CAEA,IAAMC,EAAqB,WACzB,MAAwB,oBAAbC,UAA4BA,UAAYA,SAASC,UAC7B,WAAtBD,SAASC,SAAwB,QAEnC,MACR,EAED,OAAQJ,GACN,IAAK,aACH,MAAkBC,WAAAA,MAAeI,IACnC,IAAK,UACH,MAAA,WAAkBJ,EAAuBI,YAAAA,IAC3C,IAAK,cACH,IAAIC,EAAM,OAEV,IACEA,EAAMH,SAASI,SAASC,MAAM,gBAAgB,EAM/C,CALC,MAAOC,GAEmB,cAAtBN,SAASI,UACXG,QAAQD,MAASN,SAASI,SAA1B,8BAEH,CAED,IAAMI,EAASC,EAAaX,GAC5B,OAAUC,IAAV,OAAoCS,EAAYA,EAAY,IAAA,IAAKV,EAAjE,QAAoFK,EAEtF,IAAK,YACH,MAAkBO,WAAAA,IAAkBZ,IAAAA,0BACtC,IAAK,OACH,IAAMU,EAASC,EAAaX,GAC5B,OAAUC,WAA0BS,EAAYA,EAAY,IAAA,IAAKV,EAAjE,YAEF,QACE,gBAAiBA,EAAjB,IAAgCI,IAlCpC,CAoCD,CAvCc,EA2CT,SAAUS,EACdC,EADIC,OAEoDC,cAAF,CAAA,EAAED,GAAtDhB,IAAAA,OAAMkB,IAAAA,EAAAA,IAAgDD,EAExD,OAAOlB,EAAOC,EAAPD,CAAYgB,EACpB,UAEeI,EACdJ,KAI+C,IAAAK,OAAA,IAAAC,EAAA,CAAA,EAF7CrB,EAAAA,EAAAA,EAAAA,IAAAA,OAE+C,IAAAsB,EAFzCJ,IAEyCI,EAAAC,EAAAH,EAD/CI,SAAAA,OAAW,IAAAD,KAGTE,EAAOD,EAAW,QAAU,GAGhC,OAFAC,GAAI,IAAQV,EAAZ,MAEOhB,EAAOC,EAAPD,CAAYyB,EAAWE,IAAiB,OAASD,CACzD,CAEYP,IAAAA,EAAmB,WAC9B,IAAMS,EAASC,OAAOzB,SAASwB,OAE/B,OAAIA,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,8BAChBF,EAAOE,SAAS,6BAH6C,UAI7DF,EAAOE,SAAS,8BAChBF,EAAOE,SAAS,sBAChBF,EAAOE,SAAS,qBAFqC,aAGrDF,EAAOE,SAAS,0BAChBF,EAAOE,SAAS,uBADiC,YAEjDF,EAAOE,SAAS,cAChBF,EAAOE,SAAS,YAChBF,EAAOE,SAAS,aAChBF,EAAOE,SAAS,qBAHqB,cAKlC,YACR,EAMKhB,EAAe,WACnB,IAAAiB,EAAAC,EAAMC,EAAM,SAAG7B,kBAAH4B,EAAGD,EAAUvB,eAAb,EAAGwB,EAAoBvB,MACjC,6CAGF,OAAIwB,GAAwB,cAAdA,EAAO,GACZA,EAAO,GAGT,MACR,EAEKpB,EAAe,SAACX,GACpB,IAAAgC,EAAAC,EAAM1B,EAAK,SAAGL,kBAAH+B,EAAGD,EAAU1B,eAAb,EAAG2B,EAAoB1B,MAAM,4BACxC,OAAIA,GAASA,EAAM,KAAOP,EAAoBO,EAAM,GAErD,IAAA,EAEKH,EAAS,WACb,IAAM2B,EAAS7B,SAASI,SAASC,MAAM,+BAEvC,OAAe,OAAXwB,EACK,2BAEAA,EAAO,EAEjB,EAMKN,EAAe,WACnB,IALmCS,EAK7BC,YAL6BD,IAAAA,EAAY,GAKNP,OAAOzB,SAASI,SAJ7C8B,MAAM,KAAKC,MAAM,GAAsB,GAAlB,EAAIH,KAMrC,OAAOC,EACkB,cAAvBlB,IAAqCkB,EAAWG,OAAS,EAAI,GAC7DC,QAAQ,YAAa,GACxB"}
1
+ {"version":3,"file":"url.module.js","sources":["../index.ts"],"sourcesContent":["export type Environment =\n | \"production\"\n | \"staging\"\n | \"testing\"\n | \"development\"\n | \"test\"\n | \"prototype\"\n\nexport type Product =\n | \"api\"\n | \"accounts\"\n | \"calendar\"\n | \"check-ins\"\n | \"giving\"\n | \"groups\"\n | \"home\"\n | \"login\"\n | \"people\"\n | \"publishing\"\n | \"registrations\"\n | \"services\"\n\nconst legacy = (env: Environment) => (productName: Product) => {\n env = resolveEnvironment(env)\n if (!(env && productName)) return\n\n const getCurrentProtocol = () => {\n if (typeof location !== 'undefined' && location && location.protocol) {\n return location.protocol === 'https:' ? 'https' : 'http'\n }\n return 'http'\n }\n\n switch (env) {\n case \"production\":\n return `https://${productName}.${domain()}`\n case \"staging\":\n return `https://${productName}-staging.${domain()}`\n case \"testing\":\n return `https://${productName}-testing.${domain()}`\n case \"development\": {\n let tld = \"test\"\n\n try {\n tld = location.hostname.match(/\\pco\\.(\\w+)$/)[1]\n } catch (error) {\n // don't show warning in Topbar's local dev env\n if (location.hostname !== \"localhost\") {\n console.error(`${location.hostname} is not a supported dev TLD`)\n }\n }\n\n const prefix = worktreeName(productName)\n return `${getCurrentProtocol()}://${prefix ? `${prefix}.` : ''}${productName}.pco.${tld}`\n }\n case \"prototype\":\n return `https://${prototypeEnv()}.${productName}.planningcenter.ninja`\n case \"test\": {\n const prefix = worktreeName(productName)\n return `${getCurrentProtocol()}://${prefix ? `${prefix}.` : ''}${productName}.pco.test`\n }\n default:\n return `http://${productName}.${domain()}`\n }\n}\n\nexport default legacy\n\nexport function pcoUrl(\n product: Product,\n { env = inferEnvironment() }: { env?: Environment } = {},\n) {\n return legacy(env)(product)\n}\n\nexport function pcoApiUrl(\n product: Product,\n {\n env = inferEnvironment(),\n squiggly = true,\n }: { env?: Environment; squiggly?: boolean } = {},\n) {\n let path = squiggly ? \"/~api\" : \"\"\n path += `/${product}/v2`\n\n return legacy(env)(squiggly ? inferProduct() : \"api\") + path\n}\n\n// One-way mapping: when running on a testing host, treat an explicit\n// `staging` env as `testing`. This exists so callers that hardcode\n// `env: \"staging\"` (notably topbar, which reads the Rails env) resolve\n// correctly on infra-testing boxes. We intentionally do not map the\n// reverse direction — an explicit `testing` on a staging host should\n// still produce testing URLs.\nconst resolveEnvironment = (env: Environment): Environment => {\n if (env === \"staging\" && inferEnvironment() === \"testing\") return \"testing\"\n return env\n}\n\nexport const inferEnvironment = () => {\n const origin = window.location.origin\n\n if (origin.endsWith(\"-testing.planningcenteronline.com\")) return \"testing\"\n if (origin.endsWith(\"/testing.planningcenteronline.com\")) return \"testing\"\n if (origin.endsWith(\".testing.churchcenter.com\")) return \"testing\"\n if (origin.endsWith(\"/testing.churchcenter.com\")) return \"testing\"\n if (origin.endsWith(\"-staging.planningcenteronline.com\")) return \"staging\"\n if (origin.endsWith(\"/staging.planningcenteronline.com\")) return \"staging\"\n if (origin.endsWith(\".staging.churchcenter.com\")) return \"staging\"\n if (origin.endsWith(\"/staging.churchcenter.com\")) return \"staging\"\n if (origin.endsWith(\".planningcenteronline.com\")) return \"production\"\n if (origin.endsWith(\".churchcenter.com\")) return \"production\"\n if (origin.endsWith(\"/churchcenter.com\")) return \"production\"\n if (origin.endsWith(\".planningcenter.ninja\")) return \"prototype\"\n if (origin.endsWith(\".churchcenter.ninja\")) return \"prototype\"\n if (origin.endsWith(\"pco.codes\")) return \"development\"\n if (origin.endsWith(\"pco.dev\")) return \"development\"\n if (origin.endsWith(\"pco.test\")) return \"development\"\n if (origin.endsWith(\"churchcenter.test\")) return \"development\"\n\n return \"production\"\n}\n/**\n * If the hostname is a Protonova URL, get the env from the subdomain. Defaults to main.\n * Example: my-cool-change.accounts.planningcenter.ninja -> my-cool-change\n * @returns {string}\n */\nconst prototypeEnv = () => {\n const result = location?.hostname?.match(\n /(?:www\\.)?(.+)\\..+\\.planningcenter\\.ninja/,\n )\n\n if (result && result[1] !== \"localhost\") {\n return result[1]\n }\n\n return \"main\"\n}\n\nconst worktreeName = (productName: string) => {\n const match = location?.hostname?.match(/^(.+?)\\.(.+?)\\.pco\\.\\w+$/)\n if (match && match[2] === productName) return match[1]\n return null\n}\n\nconst domain = () => {\n const result = location.hostname.match(/planningcenter(online)?.com/)\n\n if (result === null) {\n return \"planningcenteronline.com\"\n } else {\n return result[0]\n }\n}\n\nconst extractSubdomainsFrom = (host, tldLength = 1) => {\n return host.split(\".\").slice(0, (1 + tldLength) * -1)\n}\n\nconst inferProduct = () => {\n const subdomains = extractSubdomainsFrom(window.location.hostname)\n\n return subdomains[\n inferEnvironment() === \"prototype\" ? subdomains.length - 1 : 0\n ]\n .replace(/-staging$/, \"\")\n .replace(/-testing$/, \"\")\n}\n"],"names":["legacy","env","productName","resolveEnvironment","getCurrentProtocol","location","protocol","domain","tld","hostname","match","error","console","prefix","worktreeName","prototypeEnv","pcoUrl","product","_temp","_ref$env","inferEnvironment","pcoApiUrl","_temp2","_ref2$env","_ref2","squiggly","_ref2$squiggly","path","inferProduct","origin","window","endsWith","result","_location","_location$hostname","_location2","_location2$hostname","tldLength","subdomains","split","slice","length","replace"],"mappings":"AAsBMA,IAAAA,EAAS,SAACC,GAAqB,OAAA,SAACC,GAEpC,IADAD,EAAME,EAAmBF,KACZC,EAAb,CAEA,IAAME,EAAqB,WACzB,MAAwB,oBAAbC,UAA4BA,UAAYA,SAASC,UAC7B,WAAtBD,SAASC,SAAwB,QAEnC,MACR,EAED,OAAQL,GACN,IAAK,aACH,iBAAkBC,EAAlB,IAAiCK,IACnC,IAAK,UACH,iBAAkBL,EAAlB,YAAyCK,IAC3C,IAAK,UACH,iBAAkBL,EAAlB,YAAyCK,IAC3C,IAAK,cACH,IAAIC,EAAM,OAEV,IACEA,EAAMH,SAASI,SAASC,MAAM,gBAAgB,EAM/C,CALC,MAAOC,GAEmB,cAAtBN,SAASI,UACXG,QAAQD,MAASN,SAASI,SAA1B,8BAEH,CAED,IAAMI,EAASC,EAAaZ,GAC5B,OAAUE,WAA0BS,EAAYA,EAAY,IAAA,IAAKX,EAAjE,QAAoFM,EAEtF,IAAK,YACH,MAAA,WAAkBO,IAAlB,IAAoCb,EACtC,wBAAA,IAAK,OACH,IAAMW,EAASC,EAAaZ,GAC5B,OAAUE,IAA0BS,OAAAA,EAAYA,EAAN,IAAkB,IAAKX,cAEnE,QACE,gBAAiBA,EAAjB,IAAgCK,IAtCT,CAwC5B,CA1Cc,WA8CCS,EACdC,EADIC,OAEoDC,cAAF,CAAA,EAAED,GAAtDjB,IAAAA,aAAMmB,MAER,OAAOpB,EAAOC,EAAPD,CAAYiB,EACpB,UAEeI,EACdJ,EADcK,oBAKiC,CAAE,EAAAA,EAAAC,EAAAC,EAF/CvB,IAAAA,aAAMmB,UACNK,SAAAA,OAAW,IAAAC,KAGTC,EAAOF,EAAW,QAAU,GAGhC,OAFAE,OAAYV,EAAR,MAEGjB,EAAOC,EAAPD,CAAYyB,EAAWG,IAAiB,OAASD,CACzD,CAQD,IAAMxB,EAAqB,SAACF,GAC1B,MAAY,YAARA,GAA4C,YAAvBmB,IAAyC,UAC3DnB,CACR,EAEYmB,EAAmB,WAC9B,IAAMS,EAASC,OAAOzB,SAASwB,OAE/B,OAAIA,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,8BAChBF,EAAOE,SAAS,6BAH6C,UAI7DF,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,8BAChBF,EAAOE,SAAS,6BAH6C,UAI7DF,EAAOE,SAAS,8BAChBF,EAAOE,SAAS,sBAChBF,EAAOE,SAAS,qBAFqC,aAGrDF,EAAOE,SAAS,0BAChBF,EAAOE,SAAS,uBADiC,YAEjDF,EAAOE,SAAS,cAChBF,EAAOE,SAAS,YAChBF,EAAOE,SAAS,aAChBF,EAAOE,SAAS,qBAHqB,cAKlC,YACR,EAMKhB,EAAe,mBACbiB,SAAS3B,EAAAA,oBAAA4B,EAAUxB,iBAAVyB,EAAoBxB,MACjC,6CAGF,OAAIsB,GAAwB,cAAdA,EAAO,GACZA,EAAO,GAGT,MACR,EAEKlB,EAAe,SAACZ,WACdQ,SAAQL,EAAAA,oBAAA8B,EAAU1B,iBAAV2B,EAAoB1B,MAAM,4BACxC,OAAIA,GAASA,EAAM,KAAOR,EAAoBQ,EAAM,GAErD,IAAA,EAEKH,EAAS,WACb,IAAMyB,EAAS3B,SAASI,SAASC,MAAM,+BAEvC,OAAe,OAAXsB,EACK,2BAEAA,EAAO,EAEjB,EAMKJ,EAAe,WACnB,IALmCS,EAK7BC,YAL6BD,IAAAA,EAAY,GAKNP,OAAOzB,SAASI,SAJ7C8B,MAAM,KAAKC,MAAM,GAAsB,GAAlB,EAAIH,KAMrC,OAAOC,EACkB,cAAvBlB,IAAqCkB,EAAWG,OAAS,EAAI,GAE5DC,QAAQ,YAAa,IACrBA,QAAQ,YAAa,GACzB"}
package/dist/url.umd.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(((n||self).PLANNINGCENTER=n.PLANNINGCENTER||{},n.PLANNINGCENTER.url={}))}(this,function(n){var t=function(n){return function(t){if(n&&t){var e=function(){return"undefined"!=typeof location&&location&&location.protocol&&"https:"===location.protocol?"https":"http"};switch(n){case"production":return"https://"+t+"."+c();case"staging":return"https://"+t+"-staging."+c();case"development":var r="test";try{r=location.hostname.match(/\pco\.(\w+)$/)[1]}catch(n){"localhost"!==location.hostname&&console.error(location.hostname+" is not a supported dev TLD")}var a=i(t);return e()+"://"+(a?a+".":"")+t+".pco."+r;case"prototype":return"https://"+o()+"."+t+".planningcenter.ninja";case"test":var l=i(t);return e()+"://"+(l?l+".":"")+t+".pco.test";default:return"http://"+t+"."+c()}}}},e=function(){var n=window.location.origin;return n.endsWith("-staging.planningcenteronline.com")||n.endsWith("/staging.planningcenteronline.com")||n.endsWith(".staging.churchcenter.com")||n.endsWith("/staging.churchcenter.com")?"staging":n.endsWith(".planningcenteronline.com")||n.endsWith(".churchcenter.com")||n.endsWith("/churchcenter.com")?"production":n.endsWith(".planningcenter.ninja")||n.endsWith(".churchcenter.ninja")?"prototype":n.endsWith("pco.codes")||n.endsWith("pco.dev")||n.endsWith("pco.test")||n.endsWith("churchcenter.test")?"development":"production"},o=function(){var n,t,e=null==(n=location)||null==(t=n.hostname)?void 0:t.match(/(?:www\.)?(.+)\..+\.planningcenter\.ninja/);return e&&"localhost"!==e[1]?e[1]:"main"},i=function(n){var t,e,o=null==(t=location)||null==(e=t.hostname)?void 0:e.match(/^(.+?)\.(.+?)\.pco\.\w+$/);return o&&o[2]===n?o[1]:null},c=function(){var n=location.hostname.match(/planningcenter(online)?.com/);return null===n?"planningcenteronline.com":n[0]};n.default=t,n.inferEnvironment=e,n.pcoApiUrl=function(n,o){var i,c,r=void 0===o?{}:o,a=r.env,l=void 0===a?e():a,s=r.squiggly,p=void 0===s||s,h=p?"/~api":"";return h+="/"+n+"/v2",t(l)(p?(void 0===i&&(i=1),(c=window.location.hostname.split(".").slice(0,-1*(1+i)))["prototype"===e()?c.length-1:0].replace(/-staging$/,"")):"api")+h},n.pcoUrl=function(n,o){var i=(void 0===o?{}:o).env,c=void 0===i?e():i;return t(c)(n)}});
1
+ !function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(((n||self).PLANNINGCENTER=n.PLANNINGCENTER||{},n.PLANNINGCENTER.url={}))}(this,function(n){var t=function(n){return function(t){if((n=e(n))&&t){var o=function(){return"undefined"!=typeof location&&location&&location.protocol&&"https:"===location.protocol?"https":"http"};switch(n){case"production":return"https://"+t+"."+r();case"staging":return"https://"+t+"-staging."+r();case"testing":return"https://"+t+"-testing."+r();case"development":var a="test";try{a=location.hostname.match(/\pco\.(\w+)$/)[1]}catch(n){"localhost"!==location.hostname&&console.error(location.hostname+" is not a supported dev TLD")}var s=c(t);return o()+"://"+(s?s+".":"")+t+".pco."+a;case"prototype":return"https://"+i()+"."+t+".planningcenter.ninja";case"test":var l=c(t);return o()+"://"+(l?l+".":"")+t+".pco.test";default:return"http://"+t+"."+r()}}}},e=function(n){return"staging"===n&&"testing"===o()?"testing":n},o=function(){var n=window.location.origin;return n.endsWith("-testing.planningcenteronline.com")||n.endsWith("/testing.planningcenteronline.com")||n.endsWith(".testing.churchcenter.com")||n.endsWith("/testing.churchcenter.com")?"testing":n.endsWith("-staging.planningcenteronline.com")||n.endsWith("/staging.planningcenteronline.com")||n.endsWith(".staging.churchcenter.com")||n.endsWith("/staging.churchcenter.com")?"staging":n.endsWith(".planningcenteronline.com")||n.endsWith(".churchcenter.com")||n.endsWith("/churchcenter.com")?"production":n.endsWith(".planningcenter.ninja")||n.endsWith(".churchcenter.ninja")?"prototype":n.endsWith("pco.codes")||n.endsWith("pco.dev")||n.endsWith("pco.test")||n.endsWith("churchcenter.test")?"development":"production"},i=function(){var n,t,e=null==(n=location)||null==(t=n.hostname)?void 0:t.match(/(?:www\.)?(.+)\..+\.planningcenter\.ninja/);return e&&"localhost"!==e[1]?e[1]:"main"},c=function(n){var t,e,o=null==(t=location)||null==(e=t.hostname)?void 0:e.match(/^(.+?)\.(.+?)\.pco\.\w+$/);return o&&o[2]===n?o[1]:null},r=function(){var n=location.hostname.match(/planningcenter(online)?.com/);return null===n?"planningcenteronline.com":n[0]};n.default=t,n.inferEnvironment=o,n.pcoApiUrl=function(n,e){var i,c,r=void 0===e?{}:e,a=r.env,s=void 0===a?o():a,l=r.squiggly,h=void 0===l||l,p=h?"/~api":"";return p+="/"+n+"/v2",t(s)(h?(void 0===i&&(i=1),(c=window.location.hostname.split(".").slice(0,-1*(1+i)))["prototype"===o()?c.length-1:0].replace(/-staging$/,"").replace(/-testing$/,"")):"api")+p},n.pcoUrl=function(n,e){var i=(void 0===e?{}:e).env,c=void 0===i?o():i;return t(c)(n)}});
2
2
  //# sourceMappingURL=url.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"url.umd.js","sources":["../index.ts"],"sourcesContent":["export type Environment =\n | \"production\"\n | \"staging\"\n | \"development\"\n | \"test\"\n | \"prototype\"\n\nexport type Product =\n | \"api\"\n | \"accounts\"\n | \"calendar\"\n | \"check-ins\"\n | \"giving\"\n | \"groups\"\n | \"home\"\n | \"login\"\n | \"people\"\n | \"publishing\"\n | \"registrations\"\n | \"services\"\n\nconst legacy = (env: Environment) => (productName: Product) => {\n if (!(env && productName)) return\n\n const getCurrentProtocol = () => {\n if (typeof location !== 'undefined' && location && location.protocol) {\n return location.protocol === 'https:' ? 'https' : 'http'\n }\n return 'http'\n }\n\n switch (env) {\n case \"production\":\n return `https://${productName}.${domain()}`\n case \"staging\":\n return `https://${productName}-staging.${domain()}`\n case \"development\": {\n let tld = \"test\"\n\n try {\n tld = location.hostname.match(/\\pco\\.(\\w+)$/)[1]\n } catch (error) {\n // don't show warning in Topbar's local dev env\n if (location.hostname !== \"localhost\") {\n console.error(`${location.hostname} is not a supported dev TLD`)\n }\n }\n\n const prefix = worktreeName(productName)\n return `${getCurrentProtocol()}://${prefix ? `${prefix}.` : ''}${productName}.pco.${tld}`\n }\n case \"prototype\":\n return `https://${prototypeEnv()}.${productName}.planningcenter.ninja`\n case \"test\": {\n const prefix = worktreeName(productName)\n return `${getCurrentProtocol()}://${prefix ? `${prefix}.` : ''}${productName}.pco.test`\n }\n default:\n return `http://${productName}.${domain()}`\n }\n}\n\nexport default legacy\n\nexport function pcoUrl(\n product: Product,\n { env = inferEnvironment() }: { env?: Environment } = {},\n) {\n return legacy(env)(product)\n}\n\nexport function pcoApiUrl(\n product: Product,\n {\n env = inferEnvironment(),\n squiggly = true,\n }: { env?: Environment; squiggly?: boolean } = {},\n) {\n let path = squiggly ? \"/~api\" : \"\"\n path += `/${product}/v2`\n\n return legacy(env)(squiggly ? inferProduct() : \"api\") + path\n}\n\nexport const inferEnvironment = () => {\n const origin = window.location.origin\n\n if (origin.endsWith(\"-staging.planningcenteronline.com\")) return \"staging\"\n if (origin.endsWith(\"/staging.planningcenteronline.com\")) return \"staging\"\n if (origin.endsWith(\".staging.churchcenter.com\")) return \"staging\"\n if (origin.endsWith(\"/staging.churchcenter.com\")) return \"staging\"\n if (origin.endsWith(\".planningcenteronline.com\")) return \"production\"\n if (origin.endsWith(\".churchcenter.com\")) return \"production\"\n if (origin.endsWith(\"/churchcenter.com\")) return \"production\"\n if (origin.endsWith(\".planningcenter.ninja\")) return \"prototype\"\n if (origin.endsWith(\".churchcenter.ninja\")) return \"prototype\"\n if (origin.endsWith(\"pco.codes\")) return \"development\"\n if (origin.endsWith(\"pco.dev\")) return \"development\"\n if (origin.endsWith(\"pco.test\")) return \"development\"\n if (origin.endsWith(\"churchcenter.test\")) return \"development\"\n\n return \"production\"\n}\n/**\n * If the hostname is a Protonova URL, get the env from the subdomain. Defaults to main.\n * Example: my-cool-change.accounts.planningcenter.ninja -> my-cool-change\n * @returns {string}\n */\nconst prototypeEnv = () => {\n const result = location?.hostname?.match(\n /(?:www\\.)?(.+)\\..+\\.planningcenter\\.ninja/,\n )\n\n if (result && result[1] !== \"localhost\") {\n return result[1]\n }\n\n return \"main\"\n}\n\nconst worktreeName = (productName: string) => {\n const match = location?.hostname?.match(/^(.+?)\\.(.+?)\\.pco\\.\\w+$/)\n if (match && match[2] === productName) return match[1]\n return null\n}\n\nconst domain = () => {\n const result = location.hostname.match(/planningcenter(online)?.com/)\n\n if (result === null) {\n return \"planningcenteronline.com\"\n } else {\n return result[0]\n }\n}\n\nconst extractSubdomainsFrom = (host, tldLength = 1) => {\n return host.split(\".\").slice(0, (1 + tldLength) * -1)\n}\n\nconst inferProduct = () => {\n const subdomains = extractSubdomainsFrom(window.location.hostname)\n\n return subdomains[\n inferEnvironment() === \"prototype\" ? subdomains.length - 1 : 0\n ].replace(/-staging$/, \"\")\n}\n"],"names":["legacy","env","productName","getCurrentProtocol","location","protocol","domain","tld","hostname","match","error","console","prefix","worktreeName","prototypeEnv","inferEnvironment","origin","window","endsWith","_location","_location$hostname","result","_location2","_location2$hostname","product","tldLength","subdomains","_ref2","_temp2","_ref2$env","_ref2$squiggly","squiggly","path","split","slice","length","replace","_temp","_ref$env"],"mappings":"oRAqBMA,IAAAA,EAAS,SAACC,GAAqB,OAAA,SAACC,GACpC,GAAMD,GAAOC,EAAb,CAEA,IAAMC,EAAqB,WACzB,MAAwB,oBAAbC,UAA4BA,UAAYA,SAASC,UAC7B,WAAtBD,SAASC,SAAwB,QAEnC,MACR,EAED,OAAQJ,GACN,IAAK,aACH,MAAkBC,WAAAA,MAAeI,IACnC,IAAK,UACH,MAAA,WAAkBJ,EAAuBI,YAAAA,IAC3C,IAAK,cACH,IAAIC,EAAM,OAEV,IACEA,EAAMH,SAASI,SAASC,MAAM,gBAAgB,EAM/C,CALC,MAAOC,GAEmB,cAAtBN,SAASI,UACXG,QAAQD,MAASN,SAASI,SAA1B,8BAEH,CAED,IAAMI,EAASC,EAAaX,GAC5B,OAAUC,IAAV,OAAoCS,EAAYA,EAAY,IAAA,IAAKV,EAAjE,QAAoFK,EAEtF,IAAK,YACH,MAAkBO,WAAAA,IAAkBZ,IAAAA,0BACtC,IAAK,OACH,IAAMU,EAASC,EAAaX,GAC5B,OAAUC,WAA0BS,EAAYA,EAAY,IAAA,IAAKV,EAAjE,YAEF,QACE,gBAAiBA,EAAjB,IAAgCI,IAlCpC,CAoCD,CAvCc,EA+DFS,EAAmB,WAC9B,IAAMC,EAASC,OAAOb,SAASY,OAE/B,OAAIA,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,8BAChBF,EAAOE,SAAS,6BAH6C,UAI7DF,EAAOE,SAAS,8BAChBF,EAAOE,SAAS,sBAChBF,EAAOE,SAAS,qBAFqC,aAGrDF,EAAOE,SAAS,0BAChBF,EAAOE,SAAS,uBADiC,YAEjDF,EAAOE,SAAS,cAChBF,EAAOE,SAAS,YAChBF,EAAOE,SAAS,aAChBF,EAAOE,SAAS,qBAHqB,cAKlC,YACR,EAMKJ,EAAe,WACnB,IAAAK,EAAAC,EAAMC,EAAM,SAAGjB,kBAAHgB,EAAGD,EAAUX,eAAb,EAAGY,EAAoBX,MACjC,6CAGF,OAAIY,GAAwB,cAAdA,EAAO,GACZA,EAAO,GAGT,MACR,EAEKR,EAAe,SAACX,GACpB,IAAAoB,EAAAC,EAAMd,EAAK,SAAGL,kBAAHmB,EAAGD,EAAUd,eAAb,EAAGe,EAAoBd,MAAM,4BACxC,OAAIA,GAASA,EAAM,KAAOP,EAAoBO,EAAM,GAErD,IAAA,EAEKH,EAAS,WACb,IAAMe,EAASjB,SAASI,SAASC,MAAM,+BAEvC,OAAe,OAAXY,EACK,2BAEAA,EAAO,EAEjB,wDA9DCG,KAI+C,IA4DZC,EAK7BC,EAjEyCC,OAAA,IAAAC,EAAA,CAAA,EAF7C3B,EAAAA,EAAAA,EAAAA,IAAAA,OAE+C,IAAA4B,EAFzCd,IAEyCc,EAAAC,EAAAH,EAD/CI,SAAAA,OAAW,IAAAD,KAGTE,EAAOD,EAAW,QAAU,GAGhC,OAFAC,GAAI,IAAQR,EAAZ,MAEOxB,EAAOC,EAAPD,CAAY+B,YAuDgBN,IAAAA,EAAY,IAKzCC,EAAmCT,OAAOb,SAASI,SAJ7CyB,MAAM,KAAKC,MAAM,GAAsB,GAAlB,EAAIT,KAOZ,cAAvBV,IAAqCW,EAAWS,OAAS,EAAI,GAC7DC,QAAQ,YAAa,KAhEwB,OAASJ,CACzD,WAlBK,SACJR,EADIa,OAEoDC,cAAF,CAAA,EAAED,GAAtDpC,IAAAA,OAAMc,IAAAA,EAAAA,IAAgDuB,EAExD,OAAOtC,EAAOC,EAAPD,CAAYwB,EACpB"}
1
+ {"version":3,"file":"url.umd.js","sources":["../index.ts"],"sourcesContent":["export type Environment =\n | \"production\"\n | \"staging\"\n | \"testing\"\n | \"development\"\n | \"test\"\n | \"prototype\"\n\nexport type Product =\n | \"api\"\n | \"accounts\"\n | \"calendar\"\n | \"check-ins\"\n | \"giving\"\n | \"groups\"\n | \"home\"\n | \"login\"\n | \"people\"\n | \"publishing\"\n | \"registrations\"\n | \"services\"\n\nconst legacy = (env: Environment) => (productName: Product) => {\n env = resolveEnvironment(env)\n if (!(env && productName)) return\n\n const getCurrentProtocol = () => {\n if (typeof location !== 'undefined' && location && location.protocol) {\n return location.protocol === 'https:' ? 'https' : 'http'\n }\n return 'http'\n }\n\n switch (env) {\n case \"production\":\n return `https://${productName}.${domain()}`\n case \"staging\":\n return `https://${productName}-staging.${domain()}`\n case \"testing\":\n return `https://${productName}-testing.${domain()}`\n case \"development\": {\n let tld = \"test\"\n\n try {\n tld = location.hostname.match(/\\pco\\.(\\w+)$/)[1]\n } catch (error) {\n // don't show warning in Topbar's local dev env\n if (location.hostname !== \"localhost\") {\n console.error(`${location.hostname} is not a supported dev TLD`)\n }\n }\n\n const prefix = worktreeName(productName)\n return `${getCurrentProtocol()}://${prefix ? `${prefix}.` : ''}${productName}.pco.${tld}`\n }\n case \"prototype\":\n return `https://${prototypeEnv()}.${productName}.planningcenter.ninja`\n case \"test\": {\n const prefix = worktreeName(productName)\n return `${getCurrentProtocol()}://${prefix ? `${prefix}.` : ''}${productName}.pco.test`\n }\n default:\n return `http://${productName}.${domain()}`\n }\n}\n\nexport default legacy\n\nexport function pcoUrl(\n product: Product,\n { env = inferEnvironment() }: { env?: Environment } = {},\n) {\n return legacy(env)(product)\n}\n\nexport function pcoApiUrl(\n product: Product,\n {\n env = inferEnvironment(),\n squiggly = true,\n }: { env?: Environment; squiggly?: boolean } = {},\n) {\n let path = squiggly ? \"/~api\" : \"\"\n path += `/${product}/v2`\n\n return legacy(env)(squiggly ? inferProduct() : \"api\") + path\n}\n\n// One-way mapping: when running on a testing host, treat an explicit\n// `staging` env as `testing`. This exists so callers that hardcode\n// `env: \"staging\"` (notably topbar, which reads the Rails env) resolve\n// correctly on infra-testing boxes. We intentionally do not map the\n// reverse direction — an explicit `testing` on a staging host should\n// still produce testing URLs.\nconst resolveEnvironment = (env: Environment): Environment => {\n if (env === \"staging\" && inferEnvironment() === \"testing\") return \"testing\"\n return env\n}\n\nexport const inferEnvironment = () => {\n const origin = window.location.origin\n\n if (origin.endsWith(\"-testing.planningcenteronline.com\")) return \"testing\"\n if (origin.endsWith(\"/testing.planningcenteronline.com\")) return \"testing\"\n if (origin.endsWith(\".testing.churchcenter.com\")) return \"testing\"\n if (origin.endsWith(\"/testing.churchcenter.com\")) return \"testing\"\n if (origin.endsWith(\"-staging.planningcenteronline.com\")) return \"staging\"\n if (origin.endsWith(\"/staging.planningcenteronline.com\")) return \"staging\"\n if (origin.endsWith(\".staging.churchcenter.com\")) return \"staging\"\n if (origin.endsWith(\"/staging.churchcenter.com\")) return \"staging\"\n if (origin.endsWith(\".planningcenteronline.com\")) return \"production\"\n if (origin.endsWith(\".churchcenter.com\")) return \"production\"\n if (origin.endsWith(\"/churchcenter.com\")) return \"production\"\n if (origin.endsWith(\".planningcenter.ninja\")) return \"prototype\"\n if (origin.endsWith(\".churchcenter.ninja\")) return \"prototype\"\n if (origin.endsWith(\"pco.codes\")) return \"development\"\n if (origin.endsWith(\"pco.dev\")) return \"development\"\n if (origin.endsWith(\"pco.test\")) return \"development\"\n if (origin.endsWith(\"churchcenter.test\")) return \"development\"\n\n return \"production\"\n}\n/**\n * If the hostname is a Protonova URL, get the env from the subdomain. Defaults to main.\n * Example: my-cool-change.accounts.planningcenter.ninja -> my-cool-change\n * @returns {string}\n */\nconst prototypeEnv = () => {\n const result = location?.hostname?.match(\n /(?:www\\.)?(.+)\\..+\\.planningcenter\\.ninja/,\n )\n\n if (result && result[1] !== \"localhost\") {\n return result[1]\n }\n\n return \"main\"\n}\n\nconst worktreeName = (productName: string) => {\n const match = location?.hostname?.match(/^(.+?)\\.(.+?)\\.pco\\.\\w+$/)\n if (match && match[2] === productName) return match[1]\n return null\n}\n\nconst domain = () => {\n const result = location.hostname.match(/planningcenter(online)?.com/)\n\n if (result === null) {\n return \"planningcenteronline.com\"\n } else {\n return result[0]\n }\n}\n\nconst extractSubdomainsFrom = (host, tldLength = 1) => {\n return host.split(\".\").slice(0, (1 + tldLength) * -1)\n}\n\nconst inferProduct = () => {\n const subdomains = extractSubdomainsFrom(window.location.hostname)\n\n return subdomains[\n inferEnvironment() === \"prototype\" ? subdomains.length - 1 : 0\n ]\n .replace(/-staging$/, \"\")\n .replace(/-testing$/, \"\")\n}\n"],"names":["legacy","env","productName","resolveEnvironment","getCurrentProtocol","location","protocol","domain","tld","hostname","match","error","console","prefix","worktreeName","prototypeEnv","inferEnvironment","origin","window","endsWith","result","_location","_location$hostname","_location2","_location2$hostname","product","_temp2","tldLength","subdomains","_ref2$env","_ref2","squiggly","_ref2$squiggly","path","split","slice","length","replace","_temp","_ref$env"],"mappings":"oRAsBMA,IAAAA,EAAS,SAACC,GAAqB,OAAA,SAACC,GAEpC,IADAD,EAAME,EAAmBF,KACZC,EAAb,CAEA,IAAME,EAAqB,WACzB,MAAwB,oBAAbC,UAA4BA,UAAYA,SAASC,UAC7B,WAAtBD,SAASC,SAAwB,QAEnC,MACR,EAED,OAAQL,GACN,IAAK,aACH,iBAAkBC,EAAlB,IAAiCK,IACnC,IAAK,UACH,iBAAkBL,EAAlB,YAAyCK,IAC3C,IAAK,UACH,iBAAkBL,EAAlB,YAAyCK,IAC3C,IAAK,cACH,IAAIC,EAAM,OAEV,IACEA,EAAMH,SAASI,SAASC,MAAM,gBAAgB,EAM/C,CALC,MAAOC,GAEmB,cAAtBN,SAASI,UACXG,QAAQD,MAASN,SAASI,SAA1B,8BAEH,CAED,IAAMI,EAASC,EAAaZ,GAC5B,OAAUE,WAA0BS,EAAYA,EAAY,IAAA,IAAKX,EAAjE,QAAoFM,EAEtF,IAAK,YACH,MAAA,WAAkBO,IAAlB,IAAoCb,EACtC,wBAAA,IAAK,OACH,IAAMW,EAASC,EAAaZ,GAC5B,OAAUE,IAA0BS,OAAAA,EAAYA,EAAN,IAAkB,IAAKX,cAEnE,QACE,gBAAiBA,EAAjB,IAAgCK,IAtCT,CAwC5B,CA1Cc,EAwETJ,EAAqB,SAACF,GAC1B,MAAY,YAARA,GAA4C,YAAvBe,IAAyC,UAC3Df,CACR,EAEYe,EAAmB,WAC9B,IAAMC,EAASC,OAAOb,SAASY,OAE/B,OAAIA,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,8BAChBF,EAAOE,SAAS,6BAH6C,UAI7DF,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,sCAChBF,EAAOE,SAAS,8BAChBF,EAAOE,SAAS,6BAH6C,UAI7DF,EAAOE,SAAS,8BAChBF,EAAOE,SAAS,sBAChBF,EAAOE,SAAS,qBAFqC,aAGrDF,EAAOE,SAAS,0BAChBF,EAAOE,SAAS,uBADiC,YAEjDF,EAAOE,SAAS,cAChBF,EAAOE,SAAS,YAChBF,EAAOE,SAAS,aAChBF,EAAOE,SAAS,qBAHqB,cAKlC,YACR,EAMKJ,EAAe,mBACbK,SAASf,EAAAA,oBAAAgB,EAAUZ,iBAAVa,EAAoBZ,MACjC,6CAGF,OAAIU,GAAwB,cAAdA,EAAO,GACZA,EAAO,GAGT,MACR,EAEKN,EAAe,SAACZ,WACdQ,SAAQL,EAAAA,oBAAAkB,EAAUd,iBAAVe,EAAoBd,MAAM,4BACxC,OAAIA,GAASA,EAAM,KAAOR,EAAoBQ,EAAM,GAErD,IAAA,EAEKH,EAAS,WACb,IAAMa,EAASf,SAASI,SAASC,MAAM,+BAEvC,OAAe,OAAXU,EACK,2BAEAA,EAAO,EAEjB,wDA7ECK,EADcC,OAgFqBC,EAK7BC,eAhFyC,CAAE,EAAAF,EAAAG,EAAAC,EAF/C7B,IAAAA,aAAMe,UACNe,SAAAA,OAAW,IAAAC,KAGTC,EAAOF,EAAW,QAAU,GAGhC,OAFAE,OAAYR,EAAR,MAEGzB,EAAOC,EAAPD,CAAY+B,YAsEgBJ,IAAAA,EAAY,IAKzCC,EAAmCV,OAAOb,SAASI,SAJ7CyB,MAAM,KAAKC,MAAM,GAAsB,GAAlB,EAAIR,KAOZ,cAAvBX,IAAqCY,EAAWQ,OAAS,EAAI,GAE5DC,QAAQ,YAAa,IACrBA,QAAQ,YAAa,KAjFuB,OAASJ,CACzD,oBAjBCR,EADIa,OAEoDC,cAAF,CAAA,EAAED,GAAtDrC,IAAAA,aAAMe,MAER,OAAOhB,EAAOC,EAAPD,CAAYyB,EACpB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@planningcenter/url",
3
- "version": "3.2.0",
3
+ "version": "3.3.0",
4
4
  "description": "url utilities for planning center apps",
5
5
  "source": "index.ts",
6
6
  "main": "./dist/url.js",