@plasmicapp/loader-fetcher 1.0.20 → 1.0.22

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.
@@ -6,7 +6,7 @@ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'defau
6
6
 
7
7
  var fetch = _interopDefault(require('@plasmicapp/isomorphic-unfetch'));
8
8
 
9
- const VERSION = '9';
9
+ const VERSION = '10';
10
10
  const isBrowser = typeof window !== 'undefined' && window != null && typeof window.document !== 'undefined';
11
11
  class Api {
12
12
  constructor(opts) {
@@ -132,6 +132,7 @@ class PlasmicModulesFetcher {
132
132
  if (isBrowser) {
133
133
  return;
134
134
  }
135
+ const global = globalThis;
135
136
  if (global.__PLASMIC_BUNDLES === undefined) {
136
137
  global.__PLASMIC_BUNDLES = {};
137
138
  }
@@ -143,6 +144,7 @@ function internal_getCachedBundleInNodeServer(opts) {
143
144
  if (isBrowser) {
144
145
  throw new Error(`Should not be consulting Node server cache in browser`);
145
146
  }
147
+ const global = globalThis;
146
148
  return (_global$__PLASMIC_BUN = global.__PLASMIC_BUNDLES) == null ? void 0 : _global$__PLASMIC_BUN[getBundleKey(opts)];
147
149
  }
148
150
  function getBundleKey({
@@ -160,7 +162,6 @@ function getBundleKey({
160
162
  projects
161
163
  });
162
164
  }
163
- const global = globalThis;
164
165
 
165
166
  exports.Api = Api;
166
167
  exports.PlasmicModulesFetcher = PlasmicModulesFetcher;
@@ -1 +1 @@
1
- {"version":3,"file":"loader-fetcher.cjs.development.js","sources":["../src/api.ts","../src/fetcher.ts"],"sourcesContent":["import fetch from '@plasmicapp/isomorphic-unfetch';\n\nexport interface ComponentMeta {\n id: string;\n usedComponents: string[];\n projectId: string;\n name: string;\n displayName: string;\n cssFile: string;\n path: string | undefined;\n isPage: boolean;\n plumeType?: string;\n entry: string;\n isCode: boolean;\n isGlobalContextProvider: boolean;\n pageMetadata?: PageMetadata;\n metadata?: Record<string, string>;\n}\n\nexport interface PageMeta extends ComponentMeta {\n isPage: true;\n path: string;\n plumeType: never;\n pageMetadata: PageMetadata;\n}\n\nexport interface PageMetadata {\n path: string;\n title?: string | null;\n description?: string | null;\n openGraphImageUrl?: string | null;\n}\n\nexport interface GlobalGroupMeta {\n id: string;\n projectId: string;\n name: string;\n type: string;\n contextFile: string;\n useName: string;\n}\n\nexport interface ProjectMeta {\n id: string;\n teamId?: string;\n indirect?: boolean;\n name: string;\n version: string;\n remoteFonts: FontMeta[];\n globalContextsProviderFileName: string;\n}\n\nexport interface FontMeta {\n url: string;\n}\n\ninterface GlobalVariantSplitContent {\n type: 'global-variant';\n projectId: string;\n group: string;\n variant: string;\n}\n\ninterface Slice {\n id: string;\n contents: GlobalVariantSplitContent[];\n externalId?: string;\n}\n\nexport interface ExperimentSlice extends Slice {\n prob: number;\n}\n\nexport interface SegmentSlice extends Slice {\n cond: any;\n}\n\nexport interface ExperimentSplit {\n id: string;\n externalId?: string;\n type: 'experiment';\n slices: ExperimentSlice[];\n}\n\nexport interface SegmentSplit {\n id: string;\n externalId?: string;\n type: 'segment';\n slices: SegmentSlice[];\n}\n\nexport type Split = ExperimentSplit | SegmentSplit;\n\nexport interface LoaderBundleOutput {\n modules: {\n browser: (CodeModule | AssetModule)[];\n server: (CodeModule | AssetModule)[];\n };\n external: string[];\n components: ComponentMeta[];\n globalGroups: GlobalGroupMeta[];\n projects: ProjectMeta[];\n activeSplits: Split[];\n}\n\nexport interface LoaderHtmlOutput {\n html: string;\n}\n\nexport interface CodeModule {\n fileName: string;\n code: string;\n imports: string[];\n type: 'code';\n}\n\nexport interface AssetModule {\n fileName: string;\n source: string;\n type: 'asset';\n}\n\nconst VERSION = '9';\n\nexport const isBrowser =\n typeof window !== 'undefined' &&\n window != null &&\n typeof window.document !== 'undefined';\n\nexport class Api {\n private host: string;\n constructor(\n private opts: {\n projects: { id: string; token: string }[];\n host?: string;\n }\n ) {\n this.host = opts.host ?? 'https://codegen.plasmic.app';\n }\n\n async fetchLoaderData(\n projectIds: string[],\n opts: {\n platform?: 'react' | 'nextjs' | 'gatsby';\n preview?: boolean;\n browserOnly?: boolean;\n i18nKeyScheme?: 'content' | 'hash';\n }\n ) {\n const { platform, preview } = opts;\n const query = new URLSearchParams([\n ['platform', platform ?? 'react'],\n ...projectIds.map((projectId) => ['projectId', projectId]),\n ...(opts.browserOnly ? [['browserOnly', 'true']] : []),\n ...(opts.i18nKeyScheme ? [['i18nKeyScheme', opts.i18nKeyScheme]] : []),\n ]).toString();\n\n const url = `${this.host}/api/v1/loader/code/${\n preview ? 'preview' : 'published'\n }?${query}`;\n const resp = await fetch(url, {\n method: 'GET',\n headers: this.makeGetHeaders(),\n });\n if (resp.status >= 400) {\n const error = await this.parseJsonResponse(resp);\n throw new Error(\n `Error fetching loader data: ${\n error?.error?.message ?? resp.statusText\n }`\n );\n }\n const json = await this.parseJsonResponse(resp);\n return json as LoaderBundleOutput;\n }\n\n private async parseJsonResponse(resp: Response) {\n const text = await resp.text();\n try {\n return JSON.parse(text);\n } catch (err) {\n throw new Error(\n `Error parsing JSON response: ${err}; status: ${resp.status}; response: ${text}`\n );\n }\n }\n\n async fetchHtmlData(opts: {\n projectId: string;\n component: string;\n hydrate?: boolean;\n embedHydrate?: boolean;\n }) {\n const { projectId, component, embedHydrate, hydrate } = opts;\n const query = new URLSearchParams([\n ['projectId', projectId],\n ['component', component],\n ['embedHydrate', embedHydrate ? '1' : '0'],\n ['hydrate', hydrate ? '1' : '0'],\n ]).toString();\n const resp = await fetch(`${this.host}/api/v1/loader/html?${query}`, {\n method: 'GET',\n headers: this.makeGetHeaders(),\n });\n const json = await resp.json();\n return json as LoaderHtmlOutput;\n }\n\n private makeGetHeaders() {\n return {\n 'x-plasmic-loader-version': VERSION,\n ...this.makeAuthHeaders(),\n };\n }\n\n // @ts-ignore\n private makePostHeaders() {\n return {\n 'x-plasmic-loader-version': VERSION,\n 'Content-Type': 'application/json',\n ...this.makeAuthHeaders(),\n };\n }\n\n private makeAuthHeaders() {\n const tokens = this.opts.projects\n .map((p) => `${p.id}:${p.token}`)\n .join(',');\n return {\n 'x-plasmic-api-project-tokens': tokens,\n };\n }\n}\n","import { Api, isBrowser, LoaderBundleOutput } from './api';\n\nexport interface FetcherOptions {\n projects: {\n id: string;\n version?: string;\n token: string;\n }[];\n cache?: LoaderBundleCache;\n platform?: 'react' | 'nextjs' | 'gatsby';\n preview?: boolean;\n host?: string;\n i18nKeyScheme?: 'content' | 'hash';\n}\n\nexport interface LoaderBundleCache {\n set: (data: LoaderBundleOutput) => Promise<void>;\n get: () => Promise<LoaderBundleOutput>;\n}\n\nexport class PlasmicModulesFetcher {\n private api: Api;\n private curFetch: Promise<LoaderBundleOutput> | undefined = undefined;\n constructor(private opts: FetcherOptions) {\n this.api = new Api({\n projects: opts.projects,\n host: opts.host,\n });\n }\n\n async fetchAllData() {\n // getCachedOrFetched uses a cache defined by the user.\n const bundle = await this.getCachedOrFetch();\n\n // For React Server Components (Next.js 13+),\n // we need to pass server modules in LoaderBundleOutput from Server Components to Client Components.\n // We don't want to pass them via normal page props because that will be serialized to the browser.\n // Instead, we pass the bundle (including the server modules) via the Node `global` variable.\n //\n // cacheBundleInNodeServer caches a bundle in the Node server process.\n this.cacheBundleInNodeServer(bundle);\n\n return bundle;\n }\n\n private async getCachedOrFetch() {\n if (this.opts.cache) {\n const cachedData = await this.opts.cache.get();\n if (cachedData) {\n return cachedData;\n }\n }\n if (this.curFetch) {\n return await this.curFetch;\n }\n console.debug('Plasmic: doing a fresh fetch...');\n this.curFetch = this.doFetch();\n const data = await this.curFetch;\n this.curFetch = undefined;\n return data;\n }\n\n private async doFetch() {\n const data = await this.api.fetchLoaderData(\n this.opts.projects.map((p) =>\n p.version ? `${p.id}@${p.version}` : p.id\n ),\n {\n platform: this.opts.platform,\n preview: this.opts.preview,\n i18nKeyScheme: this.opts.i18nKeyScheme,\n browserOnly: isBrowser,\n }\n );\n if (this.opts.cache) {\n await this.opts.cache.set(data);\n }\n console.debug(\n `Plasmic: fetched designs for ${data.projects\n .map((p) => `\"${p.name}\" (${p.id}@${p.version})`)\n .join(', ')}`\n );\n return data;\n }\n\n private cacheBundleInNodeServer(bundle: LoaderBundleOutput) {\n if (isBrowser) {\n return;\n }\n\n if (global.__PLASMIC_BUNDLES === undefined) {\n global.__PLASMIC_BUNDLES = {};\n }\n global.__PLASMIC_BUNDLES[getBundleKey(this.opts)] = bundle;\n }\n}\n\nexport function internal_getCachedBundleInNodeServer(\n opts: FetcherOptions\n): LoaderBundleOutput | undefined {\n if (isBrowser) {\n throw new Error(`Should not be consulting Node server cache in browser`);\n }\n\n return global.__PLASMIC_BUNDLES?.[getBundleKey(opts)];\n}\n\nfunction getBundleKey({\n host,\n platform,\n i18nKeyScheme,\n preview,\n projects,\n}: FetcherOptions) {\n return JSON.stringify({\n host,\n platform,\n i18nKeyScheme,\n preview,\n projects,\n });\n}\n\ninterface GlobalWithBundles {\n __PLASMIC_BUNDLES?: { [bundleKey: string]: LoaderBundleOutput };\n}\nconst global = globalThis as GlobalWithBundles;\n"],"names":["VERSION","isBrowser","window","document","Api","constructor","opts","host","fetchLoaderData","projectIds","platform","preview","query","URLSearchParams","map","projectId","browserOnly","i18nKeyScheme","toString","url","resp","fetch","method","headers","makeGetHeaders","status","error","parseJsonResponse","Error","message","statusText","json","text","JSON","parse","err","fetchHtmlData","component","embedHydrate","hydrate","makeAuthHeaders","makePostHeaders","tokens","projects","p","id","token","join","PlasmicModulesFetcher","undefined","api","fetchAllData","bundle","getCachedOrFetch","cacheBundleInNodeServer","cache","cachedData","get","curFetch","console","debug","doFetch","data","version","set","name","global","__PLASMIC_BUNDLES","getBundleKey","internal_getCachedBundleInNodeServer","stringify","globalThis"],"mappings":"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"}
1
+ {"version":3,"file":"loader-fetcher.cjs.development.js","sources":["../src/api.ts","../src/fetcher.ts"],"sourcesContent":["import fetch from '@plasmicapp/isomorphic-unfetch';\n\nexport interface ComponentMeta {\n id: string;\n usedComponents: string[];\n projectId: string;\n name: string;\n displayName: string;\n cssFile: string;\n path: string | undefined;\n isPage: boolean;\n plumeType?: string;\n entry: string;\n isCode: boolean;\n isGlobalContextProvider: boolean;\n pageMetadata?: PageMetadata;\n metadata?: Record<string, string>;\n}\n\nexport interface PageMeta extends ComponentMeta {\n isPage: true;\n path: string;\n plumeType: never;\n pageMetadata: PageMetadata;\n}\n\nexport interface PageMetadata {\n path: string;\n title?: string | null;\n description?: string | null;\n openGraphImageUrl?: string | null;\n}\n\nexport interface GlobalGroupMeta {\n id: string;\n projectId: string;\n name: string;\n type: string;\n contextFile: string;\n useName: string;\n}\n\nexport interface ProjectMeta {\n id: string;\n teamId?: string;\n indirect?: boolean;\n name: string;\n version: string;\n remoteFonts: FontMeta[];\n globalContextsProviderFileName: string;\n}\n\nexport interface FontMeta {\n url: string;\n}\n\ninterface GlobalVariantSplitContent {\n type: 'global-variant';\n projectId: string;\n group: string;\n variant: string;\n}\n\ninterface Slice {\n id: string;\n contents: GlobalVariantSplitContent[];\n externalId?: string;\n}\n\nexport interface ExperimentSlice extends Slice {\n prob: number;\n}\n\nexport interface SegmentSlice extends Slice {\n cond: any;\n}\n\nexport interface ExperimentSplit {\n id: string;\n externalId?: string;\n type: 'experiment';\n slices: ExperimentSlice[];\n}\n\nexport interface SegmentSplit {\n id: string;\n externalId?: string;\n type: 'segment';\n slices: SegmentSlice[];\n}\n\nexport type Split = ExperimentSplit | SegmentSplit;\n\nexport interface LoaderBundleOutput {\n modules: {\n browser: (CodeModule | AssetModule)[];\n server: (CodeModule | AssetModule)[];\n };\n external: string[];\n components: ComponentMeta[];\n globalGroups: GlobalGroupMeta[];\n projects: ProjectMeta[];\n activeSplits: Split[];\n}\n\nexport interface LoaderHtmlOutput {\n html: string;\n}\n\nexport interface CodeModule {\n fileName: string;\n code: string;\n imports: string[];\n type: 'code';\n}\n\nexport interface AssetModule {\n fileName: string;\n source: string;\n type: 'asset';\n}\n\nconst VERSION = '10';\n\nexport const isBrowser =\n typeof window !== 'undefined' &&\n window != null &&\n typeof window.document !== 'undefined';\n\nexport class Api {\n private host: string;\n constructor(\n private opts: {\n projects: { id: string; token: string }[];\n host?: string;\n }\n ) {\n this.host = opts.host ?? 'https://codegen.plasmic.app';\n }\n\n async fetchLoaderData(\n projectIds: string[],\n opts: {\n platform?: 'react' | 'nextjs' | 'gatsby';\n preview?: boolean;\n browserOnly?: boolean;\n i18nKeyScheme?: 'content' | 'hash';\n }\n ) {\n const { platform, preview } = opts;\n const query = new URLSearchParams([\n ['platform', platform ?? 'react'],\n ...projectIds.map((projectId) => ['projectId', projectId]),\n ...(opts.browserOnly ? [['browserOnly', 'true']] : []),\n ...(opts.i18nKeyScheme ? [['i18nKeyScheme', opts.i18nKeyScheme]] : []),\n ]).toString();\n\n const url = `${this.host}/api/v1/loader/code/${\n preview ? 'preview' : 'published'\n }?${query}`;\n const resp = await fetch(url, {\n method: 'GET',\n headers: this.makeGetHeaders(),\n });\n if (resp.status >= 400) {\n const error = await this.parseJsonResponse(resp);\n throw new Error(\n `Error fetching loader data: ${\n error?.error?.message ?? resp.statusText\n }`\n );\n }\n const json = await this.parseJsonResponse(resp);\n return json as LoaderBundleOutput;\n }\n\n private async parseJsonResponse(resp: Response) {\n const text = await resp.text();\n try {\n return JSON.parse(text);\n } catch (err) {\n throw new Error(\n `Error parsing JSON response: ${err}; status: ${resp.status}; response: ${text}`\n );\n }\n }\n\n async fetchHtmlData(opts: {\n projectId: string;\n component: string;\n hydrate?: boolean;\n embedHydrate?: boolean;\n }) {\n const { projectId, component, embedHydrate, hydrate } = opts;\n const query = new URLSearchParams([\n ['projectId', projectId],\n ['component', component],\n ['embedHydrate', embedHydrate ? '1' : '0'],\n ['hydrate', hydrate ? '1' : '0'],\n ]).toString();\n const resp = await fetch(`${this.host}/api/v1/loader/html?${query}`, {\n method: 'GET',\n headers: this.makeGetHeaders(),\n });\n const json = await resp.json();\n return json as LoaderHtmlOutput;\n }\n\n private makeGetHeaders() {\n return {\n 'x-plasmic-loader-version': VERSION,\n ...this.makeAuthHeaders(),\n };\n }\n\n // @ts-ignore\n private makePostHeaders() {\n return {\n 'x-plasmic-loader-version': VERSION,\n 'Content-Type': 'application/json',\n ...this.makeAuthHeaders(),\n };\n }\n\n private makeAuthHeaders() {\n const tokens = this.opts.projects\n .map((p) => `${p.id}:${p.token}`)\n .join(',');\n return {\n 'x-plasmic-api-project-tokens': tokens,\n };\n }\n}\n","import { Api, isBrowser, LoaderBundleOutput } from './api';\n\nexport interface FetcherOptions {\n projects: {\n id: string;\n version?: string;\n token: string;\n }[];\n cache?: LoaderBundleCache;\n platform?: 'react' | 'nextjs' | 'gatsby';\n preview?: boolean;\n host?: string;\n i18nKeyScheme?: 'content' | 'hash';\n}\n\nexport interface LoaderBundleCache {\n set: (data: LoaderBundleOutput) => Promise<void>;\n get: () => Promise<LoaderBundleOutput>;\n}\n\nexport class PlasmicModulesFetcher {\n private api: Api;\n private curFetch: Promise<LoaderBundleOutput> | undefined = undefined;\n constructor(private opts: FetcherOptions) {\n this.api = new Api({\n projects: opts.projects,\n host: opts.host,\n });\n }\n\n async fetchAllData() {\n // getCachedOrFetched uses a cache defined by the user.\n const bundle = await this.getCachedOrFetch();\n\n // For React Server Components (Next.js 13+),\n // we need to pass server modules in LoaderBundleOutput from Server Components to Client Components.\n // We don't want to pass them via normal page props because that will be serialized to the browser.\n // Instead, we pass the bundle (including the server modules) via the Node `global` variable.\n //\n // cacheBundleInNodeServer caches a bundle in the Node server process.\n this.cacheBundleInNodeServer(bundle);\n\n return bundle;\n }\n\n private async getCachedOrFetch() {\n if (this.opts.cache) {\n const cachedData = await this.opts.cache.get();\n if (cachedData) {\n return cachedData;\n }\n }\n if (this.curFetch) {\n return await this.curFetch;\n }\n console.debug('Plasmic: doing a fresh fetch...');\n this.curFetch = this.doFetch();\n const data = await this.curFetch;\n this.curFetch = undefined;\n return data;\n }\n\n private async doFetch() {\n const data = await this.api.fetchLoaderData(\n this.opts.projects.map((p) =>\n p.version ? `${p.id}@${p.version}` : p.id\n ),\n {\n platform: this.opts.platform,\n preview: this.opts.preview,\n i18nKeyScheme: this.opts.i18nKeyScheme,\n browserOnly: isBrowser,\n }\n );\n if (this.opts.cache) {\n await this.opts.cache.set(data);\n }\n console.debug(\n `Plasmic: fetched designs for ${data.projects\n .map((p) => `\"${p.name}\" (${p.id}@${p.version})`)\n .join(', ')}`\n );\n return data;\n }\n\n private cacheBundleInNodeServer(bundle: LoaderBundleOutput) {\n if (isBrowser) {\n return;\n }\n\n const global = globalThis as GlobalWithBundles;\n if (global.__PLASMIC_BUNDLES === undefined) {\n global.__PLASMIC_BUNDLES = {};\n }\n global.__PLASMIC_BUNDLES[getBundleKey(this.opts)] = bundle;\n }\n}\n\nexport function internal_getCachedBundleInNodeServer(\n opts: FetcherOptions\n): LoaderBundleOutput | undefined {\n if (isBrowser) {\n throw new Error(`Should not be consulting Node server cache in browser`);\n }\n\n const global = globalThis as GlobalWithBundles;\n return global.__PLASMIC_BUNDLES?.[getBundleKey(opts)];\n}\n\nfunction getBundleKey({\n host,\n platform,\n i18nKeyScheme,\n preview,\n projects,\n}: FetcherOptions) {\n return JSON.stringify({\n host,\n platform,\n i18nKeyScheme,\n preview,\n projects,\n });\n}\n\ninterface GlobalWithBundles {\n __PLASMIC_BUNDLES?: { [bundleKey: string]: LoaderBundleOutput };\n}\n"],"names":["VERSION","isBrowser","window","document","Api","constructor","opts","host","fetchLoaderData","projectIds","platform","preview","query","URLSearchParams","map","projectId","browserOnly","i18nKeyScheme","toString","url","resp","fetch","method","headers","makeGetHeaders","status","error","parseJsonResponse","Error","message","statusText","json","text","JSON","parse","err","fetchHtmlData","component","embedHydrate","hydrate","makeAuthHeaders","makePostHeaders","tokens","projects","p","id","token","join","PlasmicModulesFetcher","undefined","api","fetchAllData","bundle","getCachedOrFetch","cacheBundleInNodeServer","cache","cachedData","get","curFetch","console","debug","doFetch","data","version","set","name","global","globalThis","__PLASMIC_BUNDLES","getBundleKey","internal_getCachedBundleInNodeServer","stringify"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t=(e=require("@plasmicapp/isomorphic-unfetch"))&&"object"==typeof e&&"default"in e?e.default:e;const s="undefined"!=typeof window&&null!=window&&void 0!==window.document;class r{constructor(e){var t;this.opts=e,this.host=null!=(t=e.host)?t:"https://codegen.plasmic.app"}async fetchLoaderData(e,s){const{platform:r,preview:o}=s,a=new URLSearchParams([["platform",null!=r?r:"react"],...e.map(e=>["projectId",e]),...s.browserOnly?[["browserOnly","true"]]:[],...s.i18nKeyScheme?[["i18nKeyScheme",s.i18nKeyScheme]]:[]]).toString(),i=`${this.host}/api/v1/loader/code/${o?"preview":"published"}?${a}`,n=await t(i,{method:"GET",headers:this.makeGetHeaders()});if(n.status>=400){var c,h;const e=await this.parseJsonResponse(n);throw new Error("Error fetching loader data: "+(null!=(c=null==e||null==(h=e.error)?void 0:h.message)?c:n.statusText))}return await this.parseJsonResponse(n)}async parseJsonResponse(e){const t=await e.text();try{return JSON.parse(t)}catch(s){throw new Error(`Error parsing JSON response: ${s}; status: ${e.status}; response: ${t}`)}}async fetchHtmlData(e){const{projectId:s,component:r,embedHydrate:o,hydrate:a}=e,i=new URLSearchParams([["projectId",s],["component",r],["embedHydrate",o?"1":"0"],["hydrate",a?"1":"0"]]).toString(),n=await t(`${this.host}/api/v1/loader/html?${i}`,{method:"GET",headers:this.makeGetHeaders()});return await n.json()}makeGetHeaders(){return{"x-plasmic-loader-version":"9",...this.makeAuthHeaders()}}makePostHeaders(){return{"x-plasmic-loader-version":"9","Content-Type":"application/json",...this.makeAuthHeaders()}}makeAuthHeaders(){return{"x-plasmic-api-project-tokens":this.opts.projects.map(e=>`${e.id}:${e.token}`).join(",")}}}function o({host:e,platform:t,i18nKeyScheme:s,preview:r,projects:o}){return JSON.stringify({host:e,platform:t,i18nKeyScheme:s,preview:r,projects:o})}const a=globalThis;exports.Api=r,exports.PlasmicModulesFetcher=class{constructor(e){this.opts=e,this.curFetch=void 0,this.api=new r({projects:e.projects,host:e.host})}async fetchAllData(){const e=await this.getCachedOrFetch();return this.cacheBundleInNodeServer(e),e}async getCachedOrFetch(){if(this.opts.cache){const e=await this.opts.cache.get();if(e)return e}if(this.curFetch)return await this.curFetch;console.debug("Plasmic: doing a fresh fetch..."),this.curFetch=this.doFetch();const e=await this.curFetch;return this.curFetch=void 0,e}async doFetch(){const e=await this.api.fetchLoaderData(this.opts.projects.map(e=>e.version?`${e.id}@${e.version}`:e.id),{platform:this.opts.platform,preview:this.opts.preview,i18nKeyScheme:this.opts.i18nKeyScheme,browserOnly:s});return this.opts.cache&&await this.opts.cache.set(e),console.debug("Plasmic: fetched designs for "+e.projects.map(e=>`"${e.name}" (${e.id}@${e.version})`).join(", ")),e}cacheBundleInNodeServer(e){s||(void 0===a.__PLASMIC_BUNDLES&&(a.__PLASMIC_BUNDLES={}),a.__PLASMIC_BUNDLES[o(this.opts)]=e)}},exports.internal_getCachedBundleInNodeServer=function(e){var t;if(s)throw new Error("Should not be consulting Node server cache in browser");return null==(t=a.__PLASMIC_BUNDLES)?void 0:t[o(e)]};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t=(e=require("@plasmicapp/isomorphic-unfetch"))&&"object"==typeof e&&"default"in e?e.default:e;const s="undefined"!=typeof window&&null!=window&&void 0!==window.document;class r{constructor(e){var t;this.opts=e,this.host=null!=(t=e.host)?t:"https://codegen.plasmic.app"}async fetchLoaderData(e,s){const{platform:r,preview:o}=s,a=new URLSearchParams([["platform",null!=r?r:"react"],...e.map(e=>["projectId",e]),...s.browserOnly?[["browserOnly","true"]]:[],...s.i18nKeyScheme?[["i18nKeyScheme",s.i18nKeyScheme]]:[]]).toString(),i=`${this.host}/api/v1/loader/code/${o?"preview":"published"}?${a}`,n=await t(i,{method:"GET",headers:this.makeGetHeaders()});if(n.status>=400){var c,h;const e=await this.parseJsonResponse(n);throw new Error("Error fetching loader data: "+(null!=(c=null==e||null==(h=e.error)?void 0:h.message)?c:n.statusText))}return await this.parseJsonResponse(n)}async parseJsonResponse(e){const t=await e.text();try{return JSON.parse(t)}catch(s){throw new Error(`Error parsing JSON response: ${s}; status: ${e.status}; response: ${t}`)}}async fetchHtmlData(e){const{projectId:s,component:r,embedHydrate:o,hydrate:a}=e,i=new URLSearchParams([["projectId",s],["component",r],["embedHydrate",o?"1":"0"],["hydrate",a?"1":"0"]]).toString(),n=await t(`${this.host}/api/v1/loader/html?${i}`,{method:"GET",headers:this.makeGetHeaders()});return await n.json()}makeGetHeaders(){return{"x-plasmic-loader-version":"10",...this.makeAuthHeaders()}}makePostHeaders(){return{"x-plasmic-loader-version":"10","Content-Type":"application/json",...this.makeAuthHeaders()}}makeAuthHeaders(){return{"x-plasmic-api-project-tokens":this.opts.projects.map(e=>`${e.id}:${e.token}`).join(",")}}}function o({host:e,platform:t,i18nKeyScheme:s,preview:r,projects:o}){return JSON.stringify({host:e,platform:t,i18nKeyScheme:s,preview:r,projects:o})}exports.Api=r,exports.PlasmicModulesFetcher=class{constructor(e){this.opts=e,this.curFetch=void 0,this.api=new r({projects:e.projects,host:e.host})}async fetchAllData(){const e=await this.getCachedOrFetch();return this.cacheBundleInNodeServer(e),e}async getCachedOrFetch(){if(this.opts.cache){const e=await this.opts.cache.get();if(e)return e}if(this.curFetch)return await this.curFetch;console.debug("Plasmic: doing a fresh fetch..."),this.curFetch=this.doFetch();const e=await this.curFetch;return this.curFetch=void 0,e}async doFetch(){const e=await this.api.fetchLoaderData(this.opts.projects.map(e=>e.version?`${e.id}@${e.version}`:e.id),{platform:this.opts.platform,preview:this.opts.preview,i18nKeyScheme:this.opts.i18nKeyScheme,browserOnly:s});return this.opts.cache&&await this.opts.cache.set(e),console.debug("Plasmic: fetched designs for "+e.projects.map(e=>`"${e.name}" (${e.id}@${e.version})`).join(", ")),e}cacheBundleInNodeServer(e){if(s)return;const t=globalThis;void 0===t.__PLASMIC_BUNDLES&&(t.__PLASMIC_BUNDLES={}),t.__PLASMIC_BUNDLES[o(this.opts)]=e}},exports.internal_getCachedBundleInNodeServer=function(e){var t;if(s)throw new Error("Should not be consulting Node server cache in browser");return null==(t=globalThis.__PLASMIC_BUNDLES)?void 0:t[o(e)]};
2
2
  //# sourceMappingURL=loader-fetcher.cjs.production.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader-fetcher.cjs.production.min.js","sources":["../src/api.ts","../src/fetcher.ts"],"sourcesContent":["import fetch from '@plasmicapp/isomorphic-unfetch';\n\nexport interface ComponentMeta {\n id: string;\n usedComponents: string[];\n projectId: string;\n name: string;\n displayName: string;\n cssFile: string;\n path: string | undefined;\n isPage: boolean;\n plumeType?: string;\n entry: string;\n isCode: boolean;\n isGlobalContextProvider: boolean;\n pageMetadata?: PageMetadata;\n metadata?: Record<string, string>;\n}\n\nexport interface PageMeta extends ComponentMeta {\n isPage: true;\n path: string;\n plumeType: never;\n pageMetadata: PageMetadata;\n}\n\nexport interface PageMetadata {\n path: string;\n title?: string | null;\n description?: string | null;\n openGraphImageUrl?: string | null;\n}\n\nexport interface GlobalGroupMeta {\n id: string;\n projectId: string;\n name: string;\n type: string;\n contextFile: string;\n useName: string;\n}\n\nexport interface ProjectMeta {\n id: string;\n teamId?: string;\n indirect?: boolean;\n name: string;\n version: string;\n remoteFonts: FontMeta[];\n globalContextsProviderFileName: string;\n}\n\nexport interface FontMeta {\n url: string;\n}\n\ninterface GlobalVariantSplitContent {\n type: 'global-variant';\n projectId: string;\n group: string;\n variant: string;\n}\n\ninterface Slice {\n id: string;\n contents: GlobalVariantSplitContent[];\n externalId?: string;\n}\n\nexport interface ExperimentSlice extends Slice {\n prob: number;\n}\n\nexport interface SegmentSlice extends Slice {\n cond: any;\n}\n\nexport interface ExperimentSplit {\n id: string;\n externalId?: string;\n type: 'experiment';\n slices: ExperimentSlice[];\n}\n\nexport interface SegmentSplit {\n id: string;\n externalId?: string;\n type: 'segment';\n slices: SegmentSlice[];\n}\n\nexport type Split = ExperimentSplit | SegmentSplit;\n\nexport interface LoaderBundleOutput {\n modules: {\n browser: (CodeModule | AssetModule)[];\n server: (CodeModule | AssetModule)[];\n };\n external: string[];\n components: ComponentMeta[];\n globalGroups: GlobalGroupMeta[];\n projects: ProjectMeta[];\n activeSplits: Split[];\n}\n\nexport interface LoaderHtmlOutput {\n html: string;\n}\n\nexport interface CodeModule {\n fileName: string;\n code: string;\n imports: string[];\n type: 'code';\n}\n\nexport interface AssetModule {\n fileName: string;\n source: string;\n type: 'asset';\n}\n\nconst VERSION = '9';\n\nexport const isBrowser =\n typeof window !== 'undefined' &&\n window != null &&\n typeof window.document !== 'undefined';\n\nexport class Api {\n private host: string;\n constructor(\n private opts: {\n projects: { id: string; token: string }[];\n host?: string;\n }\n ) {\n this.host = opts.host ?? 'https://codegen.plasmic.app';\n }\n\n async fetchLoaderData(\n projectIds: string[],\n opts: {\n platform?: 'react' | 'nextjs' | 'gatsby';\n preview?: boolean;\n browserOnly?: boolean;\n i18nKeyScheme?: 'content' | 'hash';\n }\n ) {\n const { platform, preview } = opts;\n const query = new URLSearchParams([\n ['platform', platform ?? 'react'],\n ...projectIds.map((projectId) => ['projectId', projectId]),\n ...(opts.browserOnly ? [['browserOnly', 'true']] : []),\n ...(opts.i18nKeyScheme ? [['i18nKeyScheme', opts.i18nKeyScheme]] : []),\n ]).toString();\n\n const url = `${this.host}/api/v1/loader/code/${\n preview ? 'preview' : 'published'\n }?${query}`;\n const resp = await fetch(url, {\n method: 'GET',\n headers: this.makeGetHeaders(),\n });\n if (resp.status >= 400) {\n const error = await this.parseJsonResponse(resp);\n throw new Error(\n `Error fetching loader data: ${\n error?.error?.message ?? resp.statusText\n }`\n );\n }\n const json = await this.parseJsonResponse(resp);\n return json as LoaderBundleOutput;\n }\n\n private async parseJsonResponse(resp: Response) {\n const text = await resp.text();\n try {\n return JSON.parse(text);\n } catch (err) {\n throw new Error(\n `Error parsing JSON response: ${err}; status: ${resp.status}; response: ${text}`\n );\n }\n }\n\n async fetchHtmlData(opts: {\n projectId: string;\n component: string;\n hydrate?: boolean;\n embedHydrate?: boolean;\n }) {\n const { projectId, component, embedHydrate, hydrate } = opts;\n const query = new URLSearchParams([\n ['projectId', projectId],\n ['component', component],\n ['embedHydrate', embedHydrate ? '1' : '0'],\n ['hydrate', hydrate ? '1' : '0'],\n ]).toString();\n const resp = await fetch(`${this.host}/api/v1/loader/html?${query}`, {\n method: 'GET',\n headers: this.makeGetHeaders(),\n });\n const json = await resp.json();\n return json as LoaderHtmlOutput;\n }\n\n private makeGetHeaders() {\n return {\n 'x-plasmic-loader-version': VERSION,\n ...this.makeAuthHeaders(),\n };\n }\n\n // @ts-ignore\n private makePostHeaders() {\n return {\n 'x-plasmic-loader-version': VERSION,\n 'Content-Type': 'application/json',\n ...this.makeAuthHeaders(),\n };\n }\n\n private makeAuthHeaders() {\n const tokens = this.opts.projects\n .map((p) => `${p.id}:${p.token}`)\n .join(',');\n return {\n 'x-plasmic-api-project-tokens': tokens,\n };\n }\n}\n","import { Api, isBrowser, LoaderBundleOutput } from './api';\n\nexport interface FetcherOptions {\n projects: {\n id: string;\n version?: string;\n token: string;\n }[];\n cache?: LoaderBundleCache;\n platform?: 'react' | 'nextjs' | 'gatsby';\n preview?: boolean;\n host?: string;\n i18nKeyScheme?: 'content' | 'hash';\n}\n\nexport interface LoaderBundleCache {\n set: (data: LoaderBundleOutput) => Promise<void>;\n get: () => Promise<LoaderBundleOutput>;\n}\n\nexport class PlasmicModulesFetcher {\n private api: Api;\n private curFetch: Promise<LoaderBundleOutput> | undefined = undefined;\n constructor(private opts: FetcherOptions) {\n this.api = new Api({\n projects: opts.projects,\n host: opts.host,\n });\n }\n\n async fetchAllData() {\n // getCachedOrFetched uses a cache defined by the user.\n const bundle = await this.getCachedOrFetch();\n\n // For React Server Components (Next.js 13+),\n // we need to pass server modules in LoaderBundleOutput from Server Components to Client Components.\n // We don't want to pass them via normal page props because that will be serialized to the browser.\n // Instead, we pass the bundle (including the server modules) via the Node `global` variable.\n //\n // cacheBundleInNodeServer caches a bundle in the Node server process.\n this.cacheBundleInNodeServer(bundle);\n\n return bundle;\n }\n\n private async getCachedOrFetch() {\n if (this.opts.cache) {\n const cachedData = await this.opts.cache.get();\n if (cachedData) {\n return cachedData;\n }\n }\n if (this.curFetch) {\n return await this.curFetch;\n }\n console.debug('Plasmic: doing a fresh fetch...');\n this.curFetch = this.doFetch();\n const data = await this.curFetch;\n this.curFetch = undefined;\n return data;\n }\n\n private async doFetch() {\n const data = await this.api.fetchLoaderData(\n this.opts.projects.map((p) =>\n p.version ? `${p.id}@${p.version}` : p.id\n ),\n {\n platform: this.opts.platform,\n preview: this.opts.preview,\n i18nKeyScheme: this.opts.i18nKeyScheme,\n browserOnly: isBrowser,\n }\n );\n if (this.opts.cache) {\n await this.opts.cache.set(data);\n }\n console.debug(\n `Plasmic: fetched designs for ${data.projects\n .map((p) => `\"${p.name}\" (${p.id}@${p.version})`)\n .join(', ')}`\n );\n return data;\n }\n\n private cacheBundleInNodeServer(bundle: LoaderBundleOutput) {\n if (isBrowser) {\n return;\n }\n\n if (global.__PLASMIC_BUNDLES === undefined) {\n global.__PLASMIC_BUNDLES = {};\n }\n global.__PLASMIC_BUNDLES[getBundleKey(this.opts)] = bundle;\n }\n}\n\nexport function internal_getCachedBundleInNodeServer(\n opts: FetcherOptions\n): LoaderBundleOutput | undefined {\n if (isBrowser) {\n throw new Error(`Should not be consulting Node server cache in browser`);\n }\n\n return global.__PLASMIC_BUNDLES?.[getBundleKey(opts)];\n}\n\nfunction getBundleKey({\n host,\n platform,\n i18nKeyScheme,\n preview,\n projects,\n}: FetcherOptions) {\n return JSON.stringify({\n host,\n platform,\n i18nKeyScheme,\n preview,\n projects,\n });\n}\n\ninterface GlobalWithBundles {\n __PLASMIC_BUNDLES?: { [bundleKey: string]: LoaderBundleOutput };\n}\nconst global = globalThis as GlobalWithBundles;\n"],"names":["isBrowser","window","document","Api","constructor","opts","this","host","[object Object]","projectIds","platform","preview","query","URLSearchParams","map","projectId","browserOnly","i18nKeyScheme","toString","url","resp","fetch","method","headers","makeGetHeaders","status","error","parseJsonResponse","Error","_error$error","message","statusText","text","JSON","parse","err","component","embedHydrate","hydrate","json","x-plasmic-loader-version","makeAuthHeaders","makePostHeaders","Content-Type","x-plasmic-api-project-tokens","projects","p","id","token","join","getBundleKey","stringify","global","globalThis","undefined","api","bundle","getCachedOrFetch","cacheBundleInNodeServer","cache","cachedData","get","curFetch","console","debug","doFetch","data","fetchLoaderData","version","set","name","__PLASMIC_BUNDLES","_global$__PLASMIC_BUN"],"mappings":"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"}
1
+ {"version":3,"file":"loader-fetcher.cjs.production.min.js","sources":["../src/api.ts","../src/fetcher.ts"],"sourcesContent":["import fetch from '@plasmicapp/isomorphic-unfetch';\n\nexport interface ComponentMeta {\n id: string;\n usedComponents: string[];\n projectId: string;\n name: string;\n displayName: string;\n cssFile: string;\n path: string | undefined;\n isPage: boolean;\n plumeType?: string;\n entry: string;\n isCode: boolean;\n isGlobalContextProvider: boolean;\n pageMetadata?: PageMetadata;\n metadata?: Record<string, string>;\n}\n\nexport interface PageMeta extends ComponentMeta {\n isPage: true;\n path: string;\n plumeType: never;\n pageMetadata: PageMetadata;\n}\n\nexport interface PageMetadata {\n path: string;\n title?: string | null;\n description?: string | null;\n openGraphImageUrl?: string | null;\n}\n\nexport interface GlobalGroupMeta {\n id: string;\n projectId: string;\n name: string;\n type: string;\n contextFile: string;\n useName: string;\n}\n\nexport interface ProjectMeta {\n id: string;\n teamId?: string;\n indirect?: boolean;\n name: string;\n version: string;\n remoteFonts: FontMeta[];\n globalContextsProviderFileName: string;\n}\n\nexport interface FontMeta {\n url: string;\n}\n\ninterface GlobalVariantSplitContent {\n type: 'global-variant';\n projectId: string;\n group: string;\n variant: string;\n}\n\ninterface Slice {\n id: string;\n contents: GlobalVariantSplitContent[];\n externalId?: string;\n}\n\nexport interface ExperimentSlice extends Slice {\n prob: number;\n}\n\nexport interface SegmentSlice extends Slice {\n cond: any;\n}\n\nexport interface ExperimentSplit {\n id: string;\n externalId?: string;\n type: 'experiment';\n slices: ExperimentSlice[];\n}\n\nexport interface SegmentSplit {\n id: string;\n externalId?: string;\n type: 'segment';\n slices: SegmentSlice[];\n}\n\nexport type Split = ExperimentSplit | SegmentSplit;\n\nexport interface LoaderBundleOutput {\n modules: {\n browser: (CodeModule | AssetModule)[];\n server: (CodeModule | AssetModule)[];\n };\n external: string[];\n components: ComponentMeta[];\n globalGroups: GlobalGroupMeta[];\n projects: ProjectMeta[];\n activeSplits: Split[];\n}\n\nexport interface LoaderHtmlOutput {\n html: string;\n}\n\nexport interface CodeModule {\n fileName: string;\n code: string;\n imports: string[];\n type: 'code';\n}\n\nexport interface AssetModule {\n fileName: string;\n source: string;\n type: 'asset';\n}\n\nconst VERSION = '10';\n\nexport const isBrowser =\n typeof window !== 'undefined' &&\n window != null &&\n typeof window.document !== 'undefined';\n\nexport class Api {\n private host: string;\n constructor(\n private opts: {\n projects: { id: string; token: string }[];\n host?: string;\n }\n ) {\n this.host = opts.host ?? 'https://codegen.plasmic.app';\n }\n\n async fetchLoaderData(\n projectIds: string[],\n opts: {\n platform?: 'react' | 'nextjs' | 'gatsby';\n preview?: boolean;\n browserOnly?: boolean;\n i18nKeyScheme?: 'content' | 'hash';\n }\n ) {\n const { platform, preview } = opts;\n const query = new URLSearchParams([\n ['platform', platform ?? 'react'],\n ...projectIds.map((projectId) => ['projectId', projectId]),\n ...(opts.browserOnly ? [['browserOnly', 'true']] : []),\n ...(opts.i18nKeyScheme ? [['i18nKeyScheme', opts.i18nKeyScheme]] : []),\n ]).toString();\n\n const url = `${this.host}/api/v1/loader/code/${\n preview ? 'preview' : 'published'\n }?${query}`;\n const resp = await fetch(url, {\n method: 'GET',\n headers: this.makeGetHeaders(),\n });\n if (resp.status >= 400) {\n const error = await this.parseJsonResponse(resp);\n throw new Error(\n `Error fetching loader data: ${\n error?.error?.message ?? resp.statusText\n }`\n );\n }\n const json = await this.parseJsonResponse(resp);\n return json as LoaderBundleOutput;\n }\n\n private async parseJsonResponse(resp: Response) {\n const text = await resp.text();\n try {\n return JSON.parse(text);\n } catch (err) {\n throw new Error(\n `Error parsing JSON response: ${err}; status: ${resp.status}; response: ${text}`\n );\n }\n }\n\n async fetchHtmlData(opts: {\n projectId: string;\n component: string;\n hydrate?: boolean;\n embedHydrate?: boolean;\n }) {\n const { projectId, component, embedHydrate, hydrate } = opts;\n const query = new URLSearchParams([\n ['projectId', projectId],\n ['component', component],\n ['embedHydrate', embedHydrate ? '1' : '0'],\n ['hydrate', hydrate ? '1' : '0'],\n ]).toString();\n const resp = await fetch(`${this.host}/api/v1/loader/html?${query}`, {\n method: 'GET',\n headers: this.makeGetHeaders(),\n });\n const json = await resp.json();\n return json as LoaderHtmlOutput;\n }\n\n private makeGetHeaders() {\n return {\n 'x-plasmic-loader-version': VERSION,\n ...this.makeAuthHeaders(),\n };\n }\n\n // @ts-ignore\n private makePostHeaders() {\n return {\n 'x-plasmic-loader-version': VERSION,\n 'Content-Type': 'application/json',\n ...this.makeAuthHeaders(),\n };\n }\n\n private makeAuthHeaders() {\n const tokens = this.opts.projects\n .map((p) => `${p.id}:${p.token}`)\n .join(',');\n return {\n 'x-plasmic-api-project-tokens': tokens,\n };\n }\n}\n","import { Api, isBrowser, LoaderBundleOutput } from './api';\n\nexport interface FetcherOptions {\n projects: {\n id: string;\n version?: string;\n token: string;\n }[];\n cache?: LoaderBundleCache;\n platform?: 'react' | 'nextjs' | 'gatsby';\n preview?: boolean;\n host?: string;\n i18nKeyScheme?: 'content' | 'hash';\n}\n\nexport interface LoaderBundleCache {\n set: (data: LoaderBundleOutput) => Promise<void>;\n get: () => Promise<LoaderBundleOutput>;\n}\n\nexport class PlasmicModulesFetcher {\n private api: Api;\n private curFetch: Promise<LoaderBundleOutput> | undefined = undefined;\n constructor(private opts: FetcherOptions) {\n this.api = new Api({\n projects: opts.projects,\n host: opts.host,\n });\n }\n\n async fetchAllData() {\n // getCachedOrFetched uses a cache defined by the user.\n const bundle = await this.getCachedOrFetch();\n\n // For React Server Components (Next.js 13+),\n // we need to pass server modules in LoaderBundleOutput from Server Components to Client Components.\n // We don't want to pass them via normal page props because that will be serialized to the browser.\n // Instead, we pass the bundle (including the server modules) via the Node `global` variable.\n //\n // cacheBundleInNodeServer caches a bundle in the Node server process.\n this.cacheBundleInNodeServer(bundle);\n\n return bundle;\n }\n\n private async getCachedOrFetch() {\n if (this.opts.cache) {\n const cachedData = await this.opts.cache.get();\n if (cachedData) {\n return cachedData;\n }\n }\n if (this.curFetch) {\n return await this.curFetch;\n }\n console.debug('Plasmic: doing a fresh fetch...');\n this.curFetch = this.doFetch();\n const data = await this.curFetch;\n this.curFetch = undefined;\n return data;\n }\n\n private async doFetch() {\n const data = await this.api.fetchLoaderData(\n this.opts.projects.map((p) =>\n p.version ? `${p.id}@${p.version}` : p.id\n ),\n {\n platform: this.opts.platform,\n preview: this.opts.preview,\n i18nKeyScheme: this.opts.i18nKeyScheme,\n browserOnly: isBrowser,\n }\n );\n if (this.opts.cache) {\n await this.opts.cache.set(data);\n }\n console.debug(\n `Plasmic: fetched designs for ${data.projects\n .map((p) => `\"${p.name}\" (${p.id}@${p.version})`)\n .join(', ')}`\n );\n return data;\n }\n\n private cacheBundleInNodeServer(bundle: LoaderBundleOutput) {\n if (isBrowser) {\n return;\n }\n\n const global = globalThis as GlobalWithBundles;\n if (global.__PLASMIC_BUNDLES === undefined) {\n global.__PLASMIC_BUNDLES = {};\n }\n global.__PLASMIC_BUNDLES[getBundleKey(this.opts)] = bundle;\n }\n}\n\nexport function internal_getCachedBundleInNodeServer(\n opts: FetcherOptions\n): LoaderBundleOutput | undefined {\n if (isBrowser) {\n throw new Error(`Should not be consulting Node server cache in browser`);\n }\n\n const global = globalThis as GlobalWithBundles;\n return global.__PLASMIC_BUNDLES?.[getBundleKey(opts)];\n}\n\nfunction getBundleKey({\n host,\n platform,\n i18nKeyScheme,\n preview,\n projects,\n}: FetcherOptions) {\n return JSON.stringify({\n host,\n platform,\n i18nKeyScheme,\n preview,\n projects,\n });\n}\n\ninterface GlobalWithBundles {\n __PLASMIC_BUNDLES?: { [bundleKey: string]: LoaderBundleOutput };\n}\n"],"names":["isBrowser","window","document","Api","constructor","opts","this","host","[object Object]","projectIds","platform","preview","query","URLSearchParams","map","projectId","browserOnly","i18nKeyScheme","toString","url","resp","fetch","method","headers","makeGetHeaders","status","error","parseJsonResponse","Error","_error$error","message","statusText","text","JSON","parse","err","component","embedHydrate","hydrate","json","x-plasmic-loader-version","makeAuthHeaders","makePostHeaders","Content-Type","x-plasmic-api-project-tokens","projects","p","id","token","join","getBundleKey","stringify","undefined","api","bundle","getCachedOrFetch","cacheBundleInNodeServer","cache","cachedData","get","curFetch","console","debug","doFetch","data","fetchLoaderData","version","set","name","global","globalThis","__PLASMIC_BUNDLES","_global$__PLASMIC_BUN"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import fetch from '@plasmicapp/isomorphic-unfetch';
2
2
 
3
- const VERSION = '9';
3
+ const VERSION = '10';
4
4
  const isBrowser = typeof window !== 'undefined' && window != null && typeof window.document !== 'undefined';
5
5
  class Api {
6
6
  constructor(opts) {
@@ -126,6 +126,7 @@ class PlasmicModulesFetcher {
126
126
  if (isBrowser) {
127
127
  return;
128
128
  }
129
+ const global = globalThis;
129
130
  if (global.__PLASMIC_BUNDLES === undefined) {
130
131
  global.__PLASMIC_BUNDLES = {};
131
132
  }
@@ -137,6 +138,7 @@ function internal_getCachedBundleInNodeServer(opts) {
137
138
  if (isBrowser) {
138
139
  throw new Error(`Should not be consulting Node server cache in browser`);
139
140
  }
141
+ const global = globalThis;
140
142
  return (_global$__PLASMIC_BUN = global.__PLASMIC_BUNDLES) == null ? void 0 : _global$__PLASMIC_BUN[getBundleKey(opts)];
141
143
  }
142
144
  function getBundleKey({
@@ -154,7 +156,6 @@ function getBundleKey({
154
156
  projects
155
157
  });
156
158
  }
157
- const global = globalThis;
158
159
 
159
160
  export { Api, PlasmicModulesFetcher, internal_getCachedBundleInNodeServer };
160
161
  //# sourceMappingURL=loader-fetcher.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader-fetcher.esm.js","sources":["../src/api.ts","../src/fetcher.ts"],"sourcesContent":["import fetch from '@plasmicapp/isomorphic-unfetch';\n\nexport interface ComponentMeta {\n id: string;\n usedComponents: string[];\n projectId: string;\n name: string;\n displayName: string;\n cssFile: string;\n path: string | undefined;\n isPage: boolean;\n plumeType?: string;\n entry: string;\n isCode: boolean;\n isGlobalContextProvider: boolean;\n pageMetadata?: PageMetadata;\n metadata?: Record<string, string>;\n}\n\nexport interface PageMeta extends ComponentMeta {\n isPage: true;\n path: string;\n plumeType: never;\n pageMetadata: PageMetadata;\n}\n\nexport interface PageMetadata {\n path: string;\n title?: string | null;\n description?: string | null;\n openGraphImageUrl?: string | null;\n}\n\nexport interface GlobalGroupMeta {\n id: string;\n projectId: string;\n name: string;\n type: string;\n contextFile: string;\n useName: string;\n}\n\nexport interface ProjectMeta {\n id: string;\n teamId?: string;\n indirect?: boolean;\n name: string;\n version: string;\n remoteFonts: FontMeta[];\n globalContextsProviderFileName: string;\n}\n\nexport interface FontMeta {\n url: string;\n}\n\ninterface GlobalVariantSplitContent {\n type: 'global-variant';\n projectId: string;\n group: string;\n variant: string;\n}\n\ninterface Slice {\n id: string;\n contents: GlobalVariantSplitContent[];\n externalId?: string;\n}\n\nexport interface ExperimentSlice extends Slice {\n prob: number;\n}\n\nexport interface SegmentSlice extends Slice {\n cond: any;\n}\n\nexport interface ExperimentSplit {\n id: string;\n externalId?: string;\n type: 'experiment';\n slices: ExperimentSlice[];\n}\n\nexport interface SegmentSplit {\n id: string;\n externalId?: string;\n type: 'segment';\n slices: SegmentSlice[];\n}\n\nexport type Split = ExperimentSplit | SegmentSplit;\n\nexport interface LoaderBundleOutput {\n modules: {\n browser: (CodeModule | AssetModule)[];\n server: (CodeModule | AssetModule)[];\n };\n external: string[];\n components: ComponentMeta[];\n globalGroups: GlobalGroupMeta[];\n projects: ProjectMeta[];\n activeSplits: Split[];\n}\n\nexport interface LoaderHtmlOutput {\n html: string;\n}\n\nexport interface CodeModule {\n fileName: string;\n code: string;\n imports: string[];\n type: 'code';\n}\n\nexport interface AssetModule {\n fileName: string;\n source: string;\n type: 'asset';\n}\n\nconst VERSION = '9';\n\nexport const isBrowser =\n typeof window !== 'undefined' &&\n window != null &&\n typeof window.document !== 'undefined';\n\nexport class Api {\n private host: string;\n constructor(\n private opts: {\n projects: { id: string; token: string }[];\n host?: string;\n }\n ) {\n this.host = opts.host ?? 'https://codegen.plasmic.app';\n }\n\n async fetchLoaderData(\n projectIds: string[],\n opts: {\n platform?: 'react' | 'nextjs' | 'gatsby';\n preview?: boolean;\n browserOnly?: boolean;\n i18nKeyScheme?: 'content' | 'hash';\n }\n ) {\n const { platform, preview } = opts;\n const query = new URLSearchParams([\n ['platform', platform ?? 'react'],\n ...projectIds.map((projectId) => ['projectId', projectId]),\n ...(opts.browserOnly ? [['browserOnly', 'true']] : []),\n ...(opts.i18nKeyScheme ? [['i18nKeyScheme', opts.i18nKeyScheme]] : []),\n ]).toString();\n\n const url = `${this.host}/api/v1/loader/code/${\n preview ? 'preview' : 'published'\n }?${query}`;\n const resp = await fetch(url, {\n method: 'GET',\n headers: this.makeGetHeaders(),\n });\n if (resp.status >= 400) {\n const error = await this.parseJsonResponse(resp);\n throw new Error(\n `Error fetching loader data: ${\n error?.error?.message ?? resp.statusText\n }`\n );\n }\n const json = await this.parseJsonResponse(resp);\n return json as LoaderBundleOutput;\n }\n\n private async parseJsonResponse(resp: Response) {\n const text = await resp.text();\n try {\n return JSON.parse(text);\n } catch (err) {\n throw new Error(\n `Error parsing JSON response: ${err}; status: ${resp.status}; response: ${text}`\n );\n }\n }\n\n async fetchHtmlData(opts: {\n projectId: string;\n component: string;\n hydrate?: boolean;\n embedHydrate?: boolean;\n }) {\n const { projectId, component, embedHydrate, hydrate } = opts;\n const query = new URLSearchParams([\n ['projectId', projectId],\n ['component', component],\n ['embedHydrate', embedHydrate ? '1' : '0'],\n ['hydrate', hydrate ? '1' : '0'],\n ]).toString();\n const resp = await fetch(`${this.host}/api/v1/loader/html?${query}`, {\n method: 'GET',\n headers: this.makeGetHeaders(),\n });\n const json = await resp.json();\n return json as LoaderHtmlOutput;\n }\n\n private makeGetHeaders() {\n return {\n 'x-plasmic-loader-version': VERSION,\n ...this.makeAuthHeaders(),\n };\n }\n\n // @ts-ignore\n private makePostHeaders() {\n return {\n 'x-plasmic-loader-version': VERSION,\n 'Content-Type': 'application/json',\n ...this.makeAuthHeaders(),\n };\n }\n\n private makeAuthHeaders() {\n const tokens = this.opts.projects\n .map((p) => `${p.id}:${p.token}`)\n .join(',');\n return {\n 'x-plasmic-api-project-tokens': tokens,\n };\n }\n}\n","import { Api, isBrowser, LoaderBundleOutput } from './api';\n\nexport interface FetcherOptions {\n projects: {\n id: string;\n version?: string;\n token: string;\n }[];\n cache?: LoaderBundleCache;\n platform?: 'react' | 'nextjs' | 'gatsby';\n preview?: boolean;\n host?: string;\n i18nKeyScheme?: 'content' | 'hash';\n}\n\nexport interface LoaderBundleCache {\n set: (data: LoaderBundleOutput) => Promise<void>;\n get: () => Promise<LoaderBundleOutput>;\n}\n\nexport class PlasmicModulesFetcher {\n private api: Api;\n private curFetch: Promise<LoaderBundleOutput> | undefined = undefined;\n constructor(private opts: FetcherOptions) {\n this.api = new Api({\n projects: opts.projects,\n host: opts.host,\n });\n }\n\n async fetchAllData() {\n // getCachedOrFetched uses a cache defined by the user.\n const bundle = await this.getCachedOrFetch();\n\n // For React Server Components (Next.js 13+),\n // we need to pass server modules in LoaderBundleOutput from Server Components to Client Components.\n // We don't want to pass them via normal page props because that will be serialized to the browser.\n // Instead, we pass the bundle (including the server modules) via the Node `global` variable.\n //\n // cacheBundleInNodeServer caches a bundle in the Node server process.\n this.cacheBundleInNodeServer(bundle);\n\n return bundle;\n }\n\n private async getCachedOrFetch() {\n if (this.opts.cache) {\n const cachedData = await this.opts.cache.get();\n if (cachedData) {\n return cachedData;\n }\n }\n if (this.curFetch) {\n return await this.curFetch;\n }\n console.debug('Plasmic: doing a fresh fetch...');\n this.curFetch = this.doFetch();\n const data = await this.curFetch;\n this.curFetch = undefined;\n return data;\n }\n\n private async doFetch() {\n const data = await this.api.fetchLoaderData(\n this.opts.projects.map((p) =>\n p.version ? `${p.id}@${p.version}` : p.id\n ),\n {\n platform: this.opts.platform,\n preview: this.opts.preview,\n i18nKeyScheme: this.opts.i18nKeyScheme,\n browserOnly: isBrowser,\n }\n );\n if (this.opts.cache) {\n await this.opts.cache.set(data);\n }\n console.debug(\n `Plasmic: fetched designs for ${data.projects\n .map((p) => `\"${p.name}\" (${p.id}@${p.version})`)\n .join(', ')}`\n );\n return data;\n }\n\n private cacheBundleInNodeServer(bundle: LoaderBundleOutput) {\n if (isBrowser) {\n return;\n }\n\n if (global.__PLASMIC_BUNDLES === undefined) {\n global.__PLASMIC_BUNDLES = {};\n }\n global.__PLASMIC_BUNDLES[getBundleKey(this.opts)] = bundle;\n }\n}\n\nexport function internal_getCachedBundleInNodeServer(\n opts: FetcherOptions\n): LoaderBundleOutput | undefined {\n if (isBrowser) {\n throw new Error(`Should not be consulting Node server cache in browser`);\n }\n\n return global.__PLASMIC_BUNDLES?.[getBundleKey(opts)];\n}\n\nfunction getBundleKey({\n host,\n platform,\n i18nKeyScheme,\n preview,\n projects,\n}: FetcherOptions) {\n return JSON.stringify({\n host,\n platform,\n i18nKeyScheme,\n preview,\n projects,\n });\n}\n\ninterface GlobalWithBundles {\n __PLASMIC_BUNDLES?: { [bundleKey: string]: LoaderBundleOutput };\n}\nconst global = globalThis as GlobalWithBundles;\n"],"names":["VERSION","isBrowser","window","document","Api","constructor","opts","host","fetchLoaderData","projectIds","platform","preview","query","URLSearchParams","map","projectId","browserOnly","i18nKeyScheme","toString","url","resp","fetch","method","headers","makeGetHeaders","status","error","parseJsonResponse","Error","message","statusText","json","text","JSON","parse","err","fetchHtmlData","component","embedHydrate","hydrate","makeAuthHeaders","makePostHeaders","tokens","projects","p","id","token","join","PlasmicModulesFetcher","undefined","api","fetchAllData","bundle","getCachedOrFetch","cacheBundleInNodeServer","cache","cachedData","get","curFetch","console","debug","doFetch","data","version","set","name","global","__PLASMIC_BUNDLES","getBundleKey","internal_getCachedBundleInNodeServer","stringify","globalThis"],"mappings":"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"}
1
+ {"version":3,"file":"loader-fetcher.esm.js","sources":["../src/api.ts","../src/fetcher.ts"],"sourcesContent":["import fetch from '@plasmicapp/isomorphic-unfetch';\n\nexport interface ComponentMeta {\n id: string;\n usedComponents: string[];\n projectId: string;\n name: string;\n displayName: string;\n cssFile: string;\n path: string | undefined;\n isPage: boolean;\n plumeType?: string;\n entry: string;\n isCode: boolean;\n isGlobalContextProvider: boolean;\n pageMetadata?: PageMetadata;\n metadata?: Record<string, string>;\n}\n\nexport interface PageMeta extends ComponentMeta {\n isPage: true;\n path: string;\n plumeType: never;\n pageMetadata: PageMetadata;\n}\n\nexport interface PageMetadata {\n path: string;\n title?: string | null;\n description?: string | null;\n openGraphImageUrl?: string | null;\n}\n\nexport interface GlobalGroupMeta {\n id: string;\n projectId: string;\n name: string;\n type: string;\n contextFile: string;\n useName: string;\n}\n\nexport interface ProjectMeta {\n id: string;\n teamId?: string;\n indirect?: boolean;\n name: string;\n version: string;\n remoteFonts: FontMeta[];\n globalContextsProviderFileName: string;\n}\n\nexport interface FontMeta {\n url: string;\n}\n\ninterface GlobalVariantSplitContent {\n type: 'global-variant';\n projectId: string;\n group: string;\n variant: string;\n}\n\ninterface Slice {\n id: string;\n contents: GlobalVariantSplitContent[];\n externalId?: string;\n}\n\nexport interface ExperimentSlice extends Slice {\n prob: number;\n}\n\nexport interface SegmentSlice extends Slice {\n cond: any;\n}\n\nexport interface ExperimentSplit {\n id: string;\n externalId?: string;\n type: 'experiment';\n slices: ExperimentSlice[];\n}\n\nexport interface SegmentSplit {\n id: string;\n externalId?: string;\n type: 'segment';\n slices: SegmentSlice[];\n}\n\nexport type Split = ExperimentSplit | SegmentSplit;\n\nexport interface LoaderBundleOutput {\n modules: {\n browser: (CodeModule | AssetModule)[];\n server: (CodeModule | AssetModule)[];\n };\n external: string[];\n components: ComponentMeta[];\n globalGroups: GlobalGroupMeta[];\n projects: ProjectMeta[];\n activeSplits: Split[];\n}\n\nexport interface LoaderHtmlOutput {\n html: string;\n}\n\nexport interface CodeModule {\n fileName: string;\n code: string;\n imports: string[];\n type: 'code';\n}\n\nexport interface AssetModule {\n fileName: string;\n source: string;\n type: 'asset';\n}\n\nconst VERSION = '10';\n\nexport const isBrowser =\n typeof window !== 'undefined' &&\n window != null &&\n typeof window.document !== 'undefined';\n\nexport class Api {\n private host: string;\n constructor(\n private opts: {\n projects: { id: string; token: string }[];\n host?: string;\n }\n ) {\n this.host = opts.host ?? 'https://codegen.plasmic.app';\n }\n\n async fetchLoaderData(\n projectIds: string[],\n opts: {\n platform?: 'react' | 'nextjs' | 'gatsby';\n preview?: boolean;\n browserOnly?: boolean;\n i18nKeyScheme?: 'content' | 'hash';\n }\n ) {\n const { platform, preview } = opts;\n const query = new URLSearchParams([\n ['platform', platform ?? 'react'],\n ...projectIds.map((projectId) => ['projectId', projectId]),\n ...(opts.browserOnly ? [['browserOnly', 'true']] : []),\n ...(opts.i18nKeyScheme ? [['i18nKeyScheme', opts.i18nKeyScheme]] : []),\n ]).toString();\n\n const url = `${this.host}/api/v1/loader/code/${\n preview ? 'preview' : 'published'\n }?${query}`;\n const resp = await fetch(url, {\n method: 'GET',\n headers: this.makeGetHeaders(),\n });\n if (resp.status >= 400) {\n const error = await this.parseJsonResponse(resp);\n throw new Error(\n `Error fetching loader data: ${\n error?.error?.message ?? resp.statusText\n }`\n );\n }\n const json = await this.parseJsonResponse(resp);\n return json as LoaderBundleOutput;\n }\n\n private async parseJsonResponse(resp: Response) {\n const text = await resp.text();\n try {\n return JSON.parse(text);\n } catch (err) {\n throw new Error(\n `Error parsing JSON response: ${err}; status: ${resp.status}; response: ${text}`\n );\n }\n }\n\n async fetchHtmlData(opts: {\n projectId: string;\n component: string;\n hydrate?: boolean;\n embedHydrate?: boolean;\n }) {\n const { projectId, component, embedHydrate, hydrate } = opts;\n const query = new URLSearchParams([\n ['projectId', projectId],\n ['component', component],\n ['embedHydrate', embedHydrate ? '1' : '0'],\n ['hydrate', hydrate ? '1' : '0'],\n ]).toString();\n const resp = await fetch(`${this.host}/api/v1/loader/html?${query}`, {\n method: 'GET',\n headers: this.makeGetHeaders(),\n });\n const json = await resp.json();\n return json as LoaderHtmlOutput;\n }\n\n private makeGetHeaders() {\n return {\n 'x-plasmic-loader-version': VERSION,\n ...this.makeAuthHeaders(),\n };\n }\n\n // @ts-ignore\n private makePostHeaders() {\n return {\n 'x-plasmic-loader-version': VERSION,\n 'Content-Type': 'application/json',\n ...this.makeAuthHeaders(),\n };\n }\n\n private makeAuthHeaders() {\n const tokens = this.opts.projects\n .map((p) => `${p.id}:${p.token}`)\n .join(',');\n return {\n 'x-plasmic-api-project-tokens': tokens,\n };\n }\n}\n","import { Api, isBrowser, LoaderBundleOutput } from './api';\n\nexport interface FetcherOptions {\n projects: {\n id: string;\n version?: string;\n token: string;\n }[];\n cache?: LoaderBundleCache;\n platform?: 'react' | 'nextjs' | 'gatsby';\n preview?: boolean;\n host?: string;\n i18nKeyScheme?: 'content' | 'hash';\n}\n\nexport interface LoaderBundleCache {\n set: (data: LoaderBundleOutput) => Promise<void>;\n get: () => Promise<LoaderBundleOutput>;\n}\n\nexport class PlasmicModulesFetcher {\n private api: Api;\n private curFetch: Promise<LoaderBundleOutput> | undefined = undefined;\n constructor(private opts: FetcherOptions) {\n this.api = new Api({\n projects: opts.projects,\n host: opts.host,\n });\n }\n\n async fetchAllData() {\n // getCachedOrFetched uses a cache defined by the user.\n const bundle = await this.getCachedOrFetch();\n\n // For React Server Components (Next.js 13+),\n // we need to pass server modules in LoaderBundleOutput from Server Components to Client Components.\n // We don't want to pass them via normal page props because that will be serialized to the browser.\n // Instead, we pass the bundle (including the server modules) via the Node `global` variable.\n //\n // cacheBundleInNodeServer caches a bundle in the Node server process.\n this.cacheBundleInNodeServer(bundle);\n\n return bundle;\n }\n\n private async getCachedOrFetch() {\n if (this.opts.cache) {\n const cachedData = await this.opts.cache.get();\n if (cachedData) {\n return cachedData;\n }\n }\n if (this.curFetch) {\n return await this.curFetch;\n }\n console.debug('Plasmic: doing a fresh fetch...');\n this.curFetch = this.doFetch();\n const data = await this.curFetch;\n this.curFetch = undefined;\n return data;\n }\n\n private async doFetch() {\n const data = await this.api.fetchLoaderData(\n this.opts.projects.map((p) =>\n p.version ? `${p.id}@${p.version}` : p.id\n ),\n {\n platform: this.opts.platform,\n preview: this.opts.preview,\n i18nKeyScheme: this.opts.i18nKeyScheme,\n browserOnly: isBrowser,\n }\n );\n if (this.opts.cache) {\n await this.opts.cache.set(data);\n }\n console.debug(\n `Plasmic: fetched designs for ${data.projects\n .map((p) => `\"${p.name}\" (${p.id}@${p.version})`)\n .join(', ')}`\n );\n return data;\n }\n\n private cacheBundleInNodeServer(bundle: LoaderBundleOutput) {\n if (isBrowser) {\n return;\n }\n\n const global = globalThis as GlobalWithBundles;\n if (global.__PLASMIC_BUNDLES === undefined) {\n global.__PLASMIC_BUNDLES = {};\n }\n global.__PLASMIC_BUNDLES[getBundleKey(this.opts)] = bundle;\n }\n}\n\nexport function internal_getCachedBundleInNodeServer(\n opts: FetcherOptions\n): LoaderBundleOutput | undefined {\n if (isBrowser) {\n throw new Error(`Should not be consulting Node server cache in browser`);\n }\n\n const global = globalThis as GlobalWithBundles;\n return global.__PLASMIC_BUNDLES?.[getBundleKey(opts)];\n}\n\nfunction getBundleKey({\n host,\n platform,\n i18nKeyScheme,\n preview,\n projects,\n}: FetcherOptions) {\n return JSON.stringify({\n host,\n platform,\n i18nKeyScheme,\n preview,\n projects,\n });\n}\n\ninterface GlobalWithBundles {\n __PLASMIC_BUNDLES?: { [bundleKey: string]: LoaderBundleOutput };\n}\n"],"names":["VERSION","isBrowser","window","document","Api","constructor","opts","host","fetchLoaderData","projectIds","platform","preview","query","URLSearchParams","map","projectId","browserOnly","i18nKeyScheme","toString","url","resp","fetch","method","headers","makeGetHeaders","status","error","parseJsonResponse","Error","message","statusText","json","text","JSON","parse","err","fetchHtmlData","component","embedHydrate","hydrate","makeAuthHeaders","makePostHeaders","tokens","projects","p","id","token","join","PlasmicModulesFetcher","undefined","api","fetchAllData","bundle","getCachedOrFetch","cacheBundleInNodeServer","cache","cachedData","get","curFetch","console","debug","doFetch","data","version","set","name","global","globalThis","__PLASMIC_BUNDLES","getBundleKey","internal_getCachedBundleInNodeServer","stringify"],"mappings":";;AA0HA,MAAMA,OAAO,GAAG,IAAI;AAEb,MAAMC,SAAS,GACpB,OAAOC,MAAM,KAAK,WAAW,IAC7BA,MAAM,IAAI,IAAI,IACd,OAAOA,MAAM,CAACC,QAAQ,KAAK,WAAW;MAE3BC,GAAG;EAEdC,YACUC,IAGP;;IAHO,SAAI,GAAJA,IAAI;IAKZ,IAAI,CAACC,IAAI,iBAAGD,IAAI,CAACC,IAAI,yBAAI,6BAA6B;;EAGxD,MAAMC,eAAe,CACnBC,UAAoB,EACpBH,IAKC;IAED,MAAM;MAAEI,QAAQ;MAAEC;KAAS,GAAGL,IAAI;IAClC,MAAMM,KAAK,GAAG,IAAIC,eAAe,CAAC,CAChC,CAAC,UAAU,EAAEH,QAAQ,WAARA,QAAQ,GAAI,OAAO,CAAC,EACjC,GAAGD,UAAU,CAACK,GAAG,CAAEC,SAAS,IAAK,CAAC,WAAW,EAAEA,SAAS,CAAC,CAAC,EAC1D,IAAIT,IAAI,CAACU,WAAW,GAAG,CAAC,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EACtD,IAAIV,IAAI,CAACW,aAAa,GAAG,CAAC,CAAC,eAAe,EAAEX,IAAI,CAACW,aAAa,CAAC,CAAC,GAAG,EAAE,CAAC,CACvE,CAAC,CAACC,QAAQ,EAAE;IAEb,MAAMC,GAAG,MAAM,IAAI,CAACZ,2BAClBI,OAAO,GAAG,SAAS,GAAG,eACpBC,OAAO;IACX,MAAMQ,IAAI,GAAG,MAAMC,KAAK,CAACF,GAAG,EAAE;MAC5BG,MAAM,EAAE,KAAK;MACbC,OAAO,EAAE,IAAI,CAACC,cAAc;KAC7B,CAAC;IACF,IAAIJ,IAAI,CAACK,MAAM,IAAI,GAAG,EAAE;MAAA;MACtB,MAAMC,KAAK,GAAG,MAAM,IAAI,CAACC,iBAAiB,CAACP,IAAI,CAAC;MAChD,MAAM,IAAIQ,KAAK,wDAEXF,KAAK,oCAALA,KAAK,CAAEA,KAAK,qBAAZ,aAAcG,OAAO,mCAAIT,IAAI,CAACU,YAC9B,CACH;;IAEH,MAAMC,IAAI,GAAG,MAAM,IAAI,CAACJ,iBAAiB,CAACP,IAAI,CAAC;IAC/C,OAAOW,IAA0B;;EAG3B,MAAMJ,iBAAiB,CAACP,IAAc;IAC5C,MAAMY,IAAI,GAAG,MAAMZ,IAAI,CAACY,IAAI,EAAE;IAC9B,IAAI;MACF,OAAOC,IAAI,CAACC,KAAK,CAACF,IAAI,CAAC;KACxB,CAAC,OAAOG,GAAG,EAAE;MACZ,MAAM,IAAIP,KAAK,iCACmBO,gBAAgBf,IAAI,CAACK,qBAAqBO,MAAM,CACjF;;;EAIL,MAAMI,aAAa,CAAC9B,IAKnB;IACC,MAAM;MAAES,SAAS;MAAEsB,SAAS;MAAEC,YAAY;MAAEC;KAAS,GAAGjC,IAAI;IAC5D,MAAMM,KAAK,GAAG,IAAIC,eAAe,CAAC,CAChC,CAAC,WAAW,EAAEE,SAAS,CAAC,EACxB,CAAC,WAAW,EAAEsB,SAAS,CAAC,EACxB,CAAC,cAAc,EAAEC,YAAY,GAAG,GAAG,GAAG,GAAG,CAAC,EAC1C,CAAC,SAAS,EAAEC,OAAO,GAAG,GAAG,GAAG,GAAG,CAAC,CACjC,CAAC,CAACrB,QAAQ,EAAE;IACb,MAAME,IAAI,GAAG,MAAMC,KAAK,IAAI,IAAI,CAACd,2BAA2BK,OAAO,EAAE;MACnEU,MAAM,EAAE,KAAK;MACbC,OAAO,EAAE,IAAI,CAACC,cAAc;KAC7B,CAAC;IACF,MAAMO,IAAI,GAAG,MAAMX,IAAI,CAACW,IAAI,EAAE;IAC9B,OAAOA,IAAwB;;EAGzBP,cAAc;IACpB,OAAO;MACL,0BAA0B,EAAExB,OAAO;MACnC,GAAG,IAAI,CAACwC,eAAe;KACxB;;;EAIKC,eAAe;IACrB,OAAO;MACL,0BAA0B,EAAEzC,OAAO;MACnC,cAAc,EAAE,kBAAkB;MAClC,GAAG,IAAI,CAACwC,eAAe;KACxB;;EAGKA,eAAe;IACrB,MAAME,MAAM,GAAG,IAAI,CAACpC,IAAI,CAACqC,QAAQ,CAC9B7B,GAAG,CAAE8B,CAAC,OAAQA,CAAC,CAACC,MAAMD,CAAC,CAACE,OAAO,CAAC,CAChCC,IAAI,CAAC,GAAG,CAAC;IACZ,OAAO;MACL,8BAA8B,EAAEL;KACjC;;;;MClNQM,qBAAqB;EAGhC3C,YAAoBC,IAAoB;IAApB,SAAI,GAAJA,IAAI;IADhB,aAAQ,GAA4C2C,SAAS;IAEnE,IAAI,CAACC,GAAG,GAAG,IAAI9C,GAAG,CAAC;MACjBuC,QAAQ,EAAErC,IAAI,CAACqC,QAAQ;MACvBpC,IAAI,EAAED,IAAI,CAACC;KACZ,CAAC;;EAGJ,MAAM4C,YAAY;;IAEhB,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACC,gBAAgB,EAAE;;;;;;;IAQ5C,IAAI,CAACC,uBAAuB,CAACF,MAAM,CAAC;IAEpC,OAAOA,MAAM;;EAGP,MAAMC,gBAAgB;IAC5B,IAAI,IAAI,CAAC/C,IAAI,CAACiD,KAAK,EAAE;MACnB,MAAMC,UAAU,GAAG,MAAM,IAAI,CAAClD,IAAI,CAACiD,KAAK,CAACE,GAAG,EAAE;MAC9C,IAAID,UAAU,EAAE;QACd,OAAOA,UAAU;;;IAGrB,IAAI,IAAI,CAACE,QAAQ,EAAE;MACjB,OAAO,MAAM,IAAI,CAACA,QAAQ;;IAE5BC,OAAO,CAACC,KAAK,CAAC,iCAAiC,CAAC;IAChD,IAAI,CAACF,QAAQ,GAAG,IAAI,CAACG,OAAO,EAAE;IAC9B,MAAMC,IAAI,GAAG,MAAM,IAAI,CAACJ,QAAQ;IAChC,IAAI,CAACA,QAAQ,GAAGT,SAAS;IACzB,OAAOa,IAAI;;EAGL,MAAMD,OAAO;IACnB,MAAMC,IAAI,GAAG,MAAM,IAAI,CAACZ,GAAG,CAAC1C,eAAe,CACzC,IAAI,CAACF,IAAI,CAACqC,QAAQ,CAAC7B,GAAG,CAAE8B,CAAC,IACvBA,CAAC,CAACmB,OAAO,MAAMnB,CAAC,CAACC,MAAMD,CAAC,CAACmB,SAAS,GAAGnB,CAAC,CAACC,EAAE,CAC1C,EACD;MACEnC,QAAQ,EAAE,IAAI,CAACJ,IAAI,CAACI,QAAQ;MAC5BC,OAAO,EAAE,IAAI,CAACL,IAAI,CAACK,OAAO;MAC1BM,aAAa,EAAE,IAAI,CAACX,IAAI,CAACW,aAAa;MACtCD,WAAW,EAAEf;KACd,CACF;IACD,IAAI,IAAI,CAACK,IAAI,CAACiD,KAAK,EAAE;MACnB,MAAM,IAAI,CAACjD,IAAI,CAACiD,KAAK,CAACS,GAAG,CAACF,IAAI,CAAC;;IAEjCH,OAAO,CAACC,KAAK,iCACqBE,IAAI,CAACnB,QAAQ,CAC1C7B,GAAG,CAAE8B,CAAC,QAASA,CAAC,CAACqB,UAAUrB,CAAC,CAACC,MAAMD,CAAC,CAACmB,UAAU,CAAC,CAChDhB,IAAI,CAAC,IAAI,GAAG,CAChB;IACD,OAAOe,IAAI;;EAGLR,uBAAuB,CAACF,MAA0B;IACxD,IAAInD,SAAS,EAAE;MACb;;IAGF,MAAMiE,MAAM,GAAGC,UAA+B;IAC9C,IAAID,MAAM,CAACE,iBAAiB,KAAKnB,SAAS,EAAE;MAC1CiB,MAAM,CAACE,iBAAiB,GAAG,EAAE;;IAE/BF,MAAM,CAACE,iBAAiB,CAACC,YAAY,CAAC,IAAI,CAAC/D,IAAI,CAAC,CAAC,GAAG8C,MAAM;;;AAI9D,SAAgBkB,oCAAoC,CAClDhE,IAAoB;;EAEpB,IAAIL,SAAS,EAAE;IACb,MAAM,IAAI2B,KAAK,wDAAwD,CAAC;;EAG1E,MAAMsC,MAAM,GAAGC,UAA+B;EAC9C,gCAAOD,MAAM,CAACE,iBAAiB,qBAAxB,sBAA2BC,YAAY,CAAC/D,IAAI,CAAC,CAAC;AACvD;AAEA,SAAS+D,YAAY,CAAC;EACpB9D,IAAI;EACJG,QAAQ;EACRO,aAAa;EACbN,OAAO;EACPgC;CACe;EACf,OAAOV,IAAI,CAACsC,SAAS,CAAC;IACpBhE,IAAI;IACJG,QAAQ;IACRO,aAAa;IACbN,OAAO;IACPgC;GACD,CAAC;AACJ;;;;"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.0.20",
2
+ "version": "1.0.22",
3
3
  "license": "MIT",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
@@ -58,5 +58,5 @@
58
58
  "publishConfig": {
59
59
  "access": "public"
60
60
  },
61
- "gitHead": "c37c2f944f1fc0572fd11293d56313fb52a1720b"
61
+ "gitHead": "119c70cd3b793b883c8107bcdc4782b3241c4f82"
62
62
  }