@plasmicapp/loader-fetcher 1.0.27 → 1.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/api.d.ts CHANGED
@@ -47,7 +47,7 @@ export interface FontMeta {
47
47
  url: string;
48
48
  }
49
49
  interface GlobalVariantSplitContent {
50
- type: 'global-variant';
50
+ type: "global-variant";
51
51
  projectId: string;
52
52
  group: string;
53
53
  variant: string;
@@ -66,13 +66,13 @@ export interface SegmentSlice extends Slice {
66
66
  export interface ExperimentSplit {
67
67
  id: string;
68
68
  externalId?: string;
69
- type: 'experiment';
69
+ type: "experiment";
70
70
  slices: ExperimentSlice[];
71
71
  }
72
72
  export interface SegmentSplit {
73
73
  id: string;
74
74
  externalId?: string;
75
- type: 'segment';
75
+ type: "segment";
76
76
  slices: SegmentSlice[];
77
77
  }
78
78
  export type Split = ExperimentSplit | SegmentSplit;
@@ -94,12 +94,12 @@ export interface CodeModule {
94
94
  fileName: string;
95
95
  code: string;
96
96
  imports: string[];
97
- type: 'code';
97
+ type: "code";
98
98
  }
99
99
  export interface AssetModule {
100
100
  fileName: string;
101
101
  source: string;
102
- type: 'asset';
102
+ type: "asset";
103
103
  }
104
104
  export declare const isBrowser: boolean;
105
105
  export declare class Api {
@@ -113,10 +113,11 @@ export declare class Api {
113
113
  host?: string;
114
114
  });
115
115
  fetchLoaderData(projectIds: string[], opts: {
116
- platform?: 'react' | 'nextjs' | 'gatsby';
116
+ platform?: "react" | "nextjs" | "gatsby";
117
117
  preview?: boolean;
118
118
  browserOnly?: boolean;
119
- i18nKeyScheme?: 'content' | 'hash';
119
+ i18nKeyScheme?: "content" | "hash" | "path";
120
+ i18nTagPrefix?: string;
120
121
  }): Promise<LoaderBundleOutput>;
121
122
  private parseJsonResponse;
122
123
  fetchHtmlData(opts: {
@@ -126,7 +127,6 @@ export declare class Api {
126
127
  embedHydrate?: boolean;
127
128
  }): Promise<LoaderHtmlOutput>;
128
129
  private makeGetHeaders;
129
- private makePostHeaders;
130
130
  private makeAuthHeaders;
131
131
  }
132
132
  export {};
package/dist/fetcher.d.ts CHANGED
@@ -9,7 +9,14 @@ export interface FetcherOptions {
9
9
  platform?: "react" | "nextjs" | "gatsby";
10
10
  preview?: boolean;
11
11
  host?: string;
12
- i18nKeyScheme?: "content" | "hash";
12
+ /**
13
+ * @deprecated use i18n.keyScheme instead
14
+ */
15
+ i18nKeyScheme?: "content" | "hash" | "path";
16
+ i18n?: {
17
+ keyScheme: "content" | "hash" | "path";
18
+ tagPrefix?: string;
19
+ };
13
20
  }
14
21
  export interface LoaderBundleCache {
15
22
  set: (data: LoaderBundleOutput) => Promise<void>;
package/dist/index.js CHANGED
@@ -88,7 +88,8 @@ var Api = class {
88
88
  ["platform", platform != null ? platform : "react"],
89
89
  ...projectIds.map((projectId) => ["projectId", projectId]),
90
90
  ...opts.browserOnly ? [["browserOnly", "true"]] : [],
91
- ...opts.i18nKeyScheme ? [["i18nKeyScheme", opts.i18nKeyScheme]] : []
91
+ ...opts.i18nKeyScheme ? [["i18nKeyScheme", opts.i18nKeyScheme]] : [],
92
+ ...opts.i18nTagPrefix ? [["i18nTagPrefix", opts.i18nTagPrefix]] : []
92
93
  ]).toString();
93
94
  const url = `${this.host}/api/v1/loader/code/${preview ? "preview" : "published"}?${query}`;
94
95
  const resp = yield (0, import_isomorphic_unfetch.default)(url, {
@@ -139,13 +140,6 @@ var Api = class {
139
140
  "x-plasmic-loader-version": VERSION
140
141
  }, this.makeAuthHeaders());
141
142
  }
142
- // @ts-ignore
143
- makePostHeaders() {
144
- return __spreadValues({
145
- "x-plasmic-loader-version": VERSION,
146
- "Content-Type": "application/json"
147
- }, this.makeAuthHeaders());
148
- }
149
143
  makeAuthHeaders() {
150
144
  const tokens = this.opts.projects.map((p) => `${p.id}:${p.token}`).join(",");
151
145
  return {
@@ -194,7 +188,7 @@ var PlasmicModulesFetcher = class {
194
188
  }
195
189
  doFetch() {
196
190
  return __async(this, null, function* () {
197
- var _a;
191
+ var _a, _b, _c, _d;
198
192
  const data = yield this.api.fetchLoaderData(
199
193
  this.opts.projects.map(
200
194
  (p) => p.version ? `${p.id}@${p.version}` : p.id
@@ -202,14 +196,15 @@ var PlasmicModulesFetcher = class {
202
196
  {
203
197
  platform: this.opts.platform,
204
198
  preview: this.opts.preview,
205
- i18nKeyScheme: this.opts.i18nKeyScheme,
199
+ i18nKeyScheme: (_b = (_a = this.opts.i18n) == null ? void 0 : _a.keyScheme) != null ? _b : this.opts.i18nKeyScheme,
200
+ i18nTagPrefix: (_c = this.opts.i18n) == null ? void 0 : _c.tagPrefix,
206
201
  browserOnly: isBrowser
207
202
  }
208
203
  );
209
204
  if (this.opts.cache) {
210
205
  yield this.opts.cache.set(data);
211
206
  }
212
- if (typeof process === "undefined" || !((_a = process.env) == null ? void 0 : _a.PLASMIC_QUIET)) {
207
+ if (typeof process === "undefined" || !((_d = process.env) == null ? void 0 : _d.PLASMIC_QUIET)) {
213
208
  console.debug(
214
209
  `Plasmic: fetched designs for ${data.projects.map((p) => `"${p.name}" (${p.id}@${p.version})`).join(", ")}`
215
210
  );
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts", "../src/api.ts", "../src/fetcher.ts"],
4
- "sourcesContent": ["export type {\n AssetModule,\n CodeModule,\n ComponentMeta,\n ExperimentSlice,\n FontMeta,\n GlobalGroupMeta,\n LoaderBundleOutput,\n LoaderHtmlOutput,\n PageMeta,\n PageMetadata,\n ProjectMeta,\n SegmentSlice,\n Split,\n} from \"./api\";\nexport { Api } from \"./api\";\nexport type { FetcherOptions, LoaderBundleCache } from \"./fetcher\";\nexport {\n internal_getCachedBundleInNodeServer,\n PlasmicModulesFetcher,\n} from \"./fetcher\";\n", "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 if (typeof process === \"undefined\" || !process.env?.PLASMIC_QUIET) {\n console.debug(\"Plasmic: doing a fresh fetch...\");\n }\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 if (typeof process === \"undefined\" || !process.env?.PLASMIC_QUIET) {\n console.debug(\n `Plasmic: fetched designs for ${data.projects\n .map((p) => `\"${p.name}\" (${p.id}@${p.version})`)\n .join(\", \")}`\n );\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"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,gCAAkB;AA0HlB,IAAM,UAAU;AAET,IAAM,YACX,OAAO,WAAW,eAClB,UAAU,QACV,OAAO,OAAO,aAAa;AAEtB,IAAM,MAAN,MAAU;AAAA,EAEf,YACU,MAIR;AAJQ;AApIZ;AAyII,SAAK,QAAO,UAAK,SAAL,YAAa;AAAA,EAC3B;AAAA,EAEM,gBACJ,YACA,MAMA;AAAA;AApJJ;AAqJI,YAAM,EAAE,UAAU,QAAQ,IAAI;AAC9B,YAAM,QAAQ,IAAI,gBAAgB;AAAA,QAChC,CAAC,YAAY,8BAAY,OAAO;AAAA,QAChC,GAAG,WAAW,IAAI,CAAC,cAAc,CAAC,aAAa,SAAS,CAAC;AAAA,QACzD,GAAI,KAAK,cAAc,CAAC,CAAC,eAAe,MAAM,CAAC,IAAI,CAAC;AAAA,QACpD,GAAI,KAAK,gBAAgB,CAAC,CAAC,iBAAiB,KAAK,aAAa,CAAC,IAAI,CAAC;AAAA,MACtE,CAAC,EAAE,SAAS;AAEZ,YAAM,MAAM,GAAG,KAAK,2BAClB,UAAU,YAAY,eACpB;AACJ,YAAM,OAAO,UAAM,0BAAAA,SAAM,KAAK;AAAA,QAC5B,QAAQ;AAAA,QACR,SAAS,KAAK,eAAe;AAAA,MAC/B,CAAC;AACD,UAAI,KAAK,UAAU,KAAK;AACtB,cAAM,QAAQ,MAAM,KAAK,kBAAkB,IAAI;AAC/C,cAAM,IAAI;AAAA,UACR,gCACE,0CAAO,UAAP,mBAAc,YAAd,YAAyB,KAAK;AAAA,QAElC;AAAA,MACF;AACA,YAAM,OAAO,MAAM,KAAK,kBAAkB,IAAI;AAC9C,aAAO;AAAA,IACT;AAAA;AAAA,EAEc,kBAAkB,MAAgB;AAAA;AAC9C,YAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,UAAI;AACF,eAAO,KAAK,MAAM,IAAI;AAAA,MACxB,SAAS,KAAP;AACA,cAAM,IAAI;AAAA,UACR,gCAAgC,gBAAgB,KAAK,qBAAqB;AAAA,QAC5E;AAAA,MACF;AAAA,IACF;AAAA;AAAA,EAEM,cAAc,MAKjB;AAAA;AACD,YAAM,EAAE,WAAW,WAAW,cAAc,QAAQ,IAAI;AACxD,YAAM,QAAQ,IAAI,gBAAgB;AAAA,QAChC,CAAC,aAAa,SAAS;AAAA,QACvB,CAAC,aAAa,SAAS;AAAA,QACvB,CAAC,gBAAgB,eAAe,MAAM,GAAG;AAAA,QACzC,CAAC,WAAW,UAAU,MAAM,GAAG;AAAA,MACjC,CAAC,EAAE,SAAS;AACZ,YAAM,OAAO,UAAM,0BAAAA,SAAM,GAAG,KAAK,2BAA2B,SAAS;AAAA,QACnE,QAAQ;AAAA,QACR,SAAS,KAAK,eAAe;AAAA,MAC/B,CAAC;AACD,YAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,aAAO;AAAA,IACT;AAAA;AAAA,EAEQ,iBAAiB;AACvB,WAAO;AAAA,MACL,4BAA4B;AAAA,OACzB,KAAK,gBAAgB;AAAA,EAE5B;AAAA;AAAA,EAGQ,kBAAkB;AACxB,WAAO;AAAA,MACL,4BAA4B;AAAA,MAC5B,gBAAgB;AAAA,OACb,KAAK,gBAAgB;AAAA,EAE5B;AAAA,EAEQ,kBAAkB;AACxB,UAAM,SAAS,KAAK,KAAK,SACtB,IAAI,CAAC,MAAM,GAAG,EAAE,MAAM,EAAE,OAAO,EAC/B,KAAK,GAAG;AACX,WAAO;AAAA,MACL,gCAAgC;AAAA,IAClC;AAAA,EACF;AACF;;;ACpNO,IAAM,wBAAN,MAA4B;AAAA,EAGjC,YAAoB,MAAsB;AAAtB;AADpB,SAAQ,WAAoD;AAE1D,SAAK,MAAM,IAAI,IAAI;AAAA,MACjB,UAAU,KAAK;AAAA,MACf,MAAM,KAAK;AAAA,IACb,CAAC;AAAA,EACH;AAAA,EAEM,eAAe;AAAA;AAEnB,YAAM,SAAS,MAAM,KAAK,iBAAiB;AAQ3C,WAAK,wBAAwB,MAAM;AAEnC,aAAO;AAAA,IACT;AAAA;AAAA,EAEc,mBAAmB;AAAA;AA7CnC;AA8CI,UAAI,KAAK,KAAK,OAAO;AACnB,cAAM,aAAa,MAAM,KAAK,KAAK,MAAM,IAAI;AAC7C,YAAI,YAAY;AACd,iBAAO;AAAA,QACT;AAAA,MACF;AACA,UAAI,KAAK,UAAU;AACjB,eAAO,MAAM,KAAK;AAAA,MACpB;AACA,UAAI,OAAO,YAAY,eAAe,GAAC,aAAQ,QAAR,mBAAa,gBAAe;AACjE,gBAAQ,MAAM,iCAAiC;AAAA,MACjD;AACA,WAAK,WAAW,KAAK,QAAQ;AAC7B,YAAM,OAAO,MAAM,KAAK;AACxB,WAAK,WAAW;AAChB,aAAO;AAAA,IACT;AAAA;AAAA,EAEc,UAAU;AAAA;AAhE1B;AAiEI,YAAM,OAAO,MAAM,KAAK,IAAI;AAAA,QAC1B,KAAK,KAAK,SAAS;AAAA,UAAI,CAAC,MACtB,EAAE,UAAU,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE;AAAA,QACzC;AAAA,QACA;AAAA,UACE,UAAU,KAAK,KAAK;AAAA,UACpB,SAAS,KAAK,KAAK;AAAA,UACnB,eAAe,KAAK,KAAK;AAAA,UACzB,aAAa;AAAA,QACf;AAAA,MACF;AACA,UAAI,KAAK,KAAK,OAAO;AACnB,cAAM,KAAK,KAAK,MAAM,IAAI,IAAI;AAAA,MAChC;AACA,UAAI,OAAO,YAAY,eAAe,GAAC,aAAQ,QAAR,mBAAa,gBAAe;AACjE,gBAAQ;AAAA,UACN,gCAAgC,KAAK,SAClC,IAAI,CAAC,MAAM,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAC/C,KAAK,IAAI;AAAA,QACd;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA;AAAA,EAEQ,wBAAwB,QAA4B;AAC1D,QAAI,WAAW;AACb;AAAA,IACF;AAEA,UAAM,SAAS;AACf,QAAI,OAAO,sBAAsB,QAAW;AAC1C,aAAO,oBAAoB,CAAC;AAAA,IAC9B;AACA,WAAO,kBAAkB,aAAa,KAAK,IAAI,CAAC,IAAI;AAAA,EACtD;AACF;AAEO,SAAS,qCACd,MACgC;AAxGlC;AAyGE,MAAI,WAAW;AACb,UAAM,IAAI,MAAM,uDAAuD;AAAA,EACzE;AAEA,QAAM,SAAS;AACf,UAAO,YAAO,sBAAP,mBAA2B,aAAa,IAAI;AACrD;AAEA,SAAS,aAAa;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAmB;AACjB,SAAO,KAAK,UAAU;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;",
4
+ "sourcesContent": ["export type {\n AssetModule,\n CodeModule,\n ComponentMeta,\n ExperimentSlice,\n FontMeta,\n GlobalGroupMeta,\n LoaderBundleOutput,\n LoaderHtmlOutput,\n PageMeta,\n PageMetadata,\n ProjectMeta,\n SegmentSlice,\n Split,\n} from \"./api\";\nexport { Api } from \"./api\";\nexport type { FetcherOptions, LoaderBundleCache } from \"./fetcher\";\nexport {\n internal_getCachedBundleInNodeServer,\n PlasmicModulesFetcher,\n} from \"./fetcher\";\n", "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\" | \"path\";\n i18nTagPrefix?: string;\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 ...(opts.i18nTagPrefix ? [[\"i18nTagPrefix\", opts.i18nTagPrefix]] : []),\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 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 /**\n * @deprecated use i18n.keyScheme instead\n */\n i18nKeyScheme?: \"content\" | \"hash\" | \"path\";\n i18n?: {\n keyScheme: \"content\" | \"hash\" | \"path\";\n tagPrefix?: string;\n };\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 if (typeof process === \"undefined\" || !process.env?.PLASMIC_QUIET) {\n console.debug(\"Plasmic: doing a fresh fetch...\");\n }\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.i18n?.keyScheme ?? this.opts.i18nKeyScheme,\n i18nTagPrefix: this.opts.i18n?.tagPrefix,\n browserOnly: isBrowser,\n }\n );\n if (this.opts.cache) {\n await this.opts.cache.set(data);\n }\n if (typeof process === \"undefined\" || !process.env?.PLASMIC_QUIET) {\n console.debug(\n `Plasmic: fetched designs for ${data.projects\n .map((p) => `\"${p.name}\" (${p.id}@${p.version})`)\n .join(\", \")}`\n );\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"],
5
+ "mappings": "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",
6
6
  "names": ["fetch"]
7
7
  }
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.0.27",
2
+ "version": "1.0.28",
3
3
  "license": "MIT",
4
4
  "types": "./dist/index.d.ts",
5
5
  "main": "./dist/index.js",
@@ -41,5 +41,5 @@
41
41
  "publishConfig": {
42
42
  "access": "public"
43
43
  },
44
- "gitHead": "5885bbd51f5aa2e88adc8581b96a4547ef48a369"
44
+ "gitHead": "b416c3aff370f8f8b0c884e3700bd8fe61ad3e2b"
45
45
  }