@plasmicapp/loader-fetcher 1.0.60 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -30,13 +30,6 @@ export declare class Api {
30
30
  }): Promise<LoaderBundleOutput>;
31
31
  private verifyAndParseJsonResponse;
32
32
  private parseJsonResponse;
33
- /** @deprecated */
34
- fetchHtmlData(_opts: {
35
- projectId: string;
36
- component: string;
37
- hydrate?: boolean;
38
- embedHydrate?: boolean;
39
- }): Promise<LoaderHtmlOutput>;
40
33
  private makeGetHeaders;
41
34
  private makeAuthHeaders;
42
35
  getChunksUrl(bundle: LoaderBundleOutput, modules: CodeModule[]): string;
@@ -126,10 +119,6 @@ export declare interface FetcherOptions {
126
119
  apiHost?: string;
127
120
  /** Used for fetching published content. */
128
121
  cdnHost?: string;
129
- /**
130
- * @deprecated use i18n.keyScheme instead
131
- */
132
- i18nKeyScheme?: "content" | "hash" | "path";
133
122
  i18n?: {
134
123
  keyScheme: "content" | "hash" | "path";
135
124
  tagPrefix?: string;
@@ -170,10 +159,6 @@ export declare interface LoaderBundleOutput extends ApiLoaderBundleOutput {
170
159
  filteredIds: Record<string, string[]>;
171
160
  }
172
161
 
173
- export declare interface LoaderHtmlOutput {
174
- html: string;
175
- }
176
-
177
162
  export declare interface PageMeta extends ComponentMeta {
178
163
  isPage: true;
179
164
  path: string;
package/dist/index.esm.js CHANGED
@@ -17,6 +17,7 @@ var __spreadValues = (a, b) => {
17
17
  return a;
18
18
  };
19
19
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
20
21
  var __async = (__this, __arguments, generator) => {
21
22
  return new Promise((resolve, reject) => {
22
23
  var fulfilled = (value) => {
@@ -49,8 +50,11 @@ function transformApiLoaderBundleOutput(bundle) {
49
50
  }
50
51
  var Api = class {
51
52
  constructor(opts) {
52
- this.opts = opts;
53
- this.lastResponse = void 0;
53
+ __publicField(this, "opts", opts);
54
+ __publicField(this, "apiHost");
55
+ __publicField(this, "cdnHost");
56
+ __publicField(this, "fetch");
57
+ __publicField(this, "lastResponse");
54
58
  var _a, _b, _c, _d;
55
59
  this.apiHost = (_b = (_a = opts.apiHost) != null ? _a : opts.host) != null ? _b : "https://codegen-origin.plasmic.app";
56
60
  this.cdnHost = (_d = (_c = opts.cdnHost) != null ? _c : opts.host) != null ? _d : "https://codegen.plasmic.app";
@@ -149,12 +153,6 @@ var Api = class {
149
153
  }
150
154
  });
151
155
  }
152
- /** @deprecated */
153
- fetchHtmlData(_opts) {
154
- return __async(this, null, function* () {
155
- throw new Error("deprecated");
156
- });
157
- }
158
156
  makeGetHeaders() {
159
157
  return __spreadValues({
160
158
  "x-plasmic-loader-version": VERSION
@@ -179,8 +177,9 @@ var Api = class {
179
177
  // src/fetcher.ts
180
178
  var PlasmicModulesFetcher = class {
181
179
  constructor(opts) {
182
- this.opts = opts;
183
- this.curFetch = void 0;
180
+ __publicField(this, "opts", opts);
181
+ __publicField(this, "api");
182
+ __publicField(this, "curFetch");
184
183
  this.api = new Api({
185
184
  projects: opts.projects,
186
185
  host: opts.host,
@@ -229,7 +228,7 @@ var PlasmicModulesFetcher = class {
229
228
  }
230
229
  doFetch() {
231
230
  return __async(this, null, function* () {
232
- var _a, _b, _c, _d;
231
+ var _a, _b, _c;
233
232
  const data = yield this.api.fetchLoaderData(
234
233
  this.opts.projects.map(
235
234
  (p) => p.version ? `${p.id}@${p.version}` : p.id
@@ -238,8 +237,8 @@ var PlasmicModulesFetcher = class {
238
237
  platform: this.opts.platform,
239
238
  platformOptions: this.opts.platformOptions,
240
239
  preview: this.opts.preview,
241
- i18nKeyScheme: (_b = (_a = this.opts.i18n) == null ? void 0 : _a.keyScheme) != null ? _b : this.opts.i18nKeyScheme,
242
- i18nTagPrefix: (_c = this.opts.i18n) == null ? void 0 : _c.tagPrefix,
240
+ i18nKeyScheme: (_a = this.opts.i18n) == null ? void 0 : _a.keyScheme,
241
+ i18nTagPrefix: (_b = this.opts.i18n) == null ? void 0 : _b.tagPrefix,
243
242
  browserOnly: isBrowser,
244
243
  skipHead: this.opts.skipHead
245
244
  }
@@ -247,7 +246,7 @@ var PlasmicModulesFetcher = class {
247
246
  if (this.opts.cache) {
248
247
  yield this.opts.cache.set(data);
249
248
  }
250
- if (typeof process === "undefined" || !((_d = process.env) == null ? void 0 : _d.PLASMIC_QUIET)) {
249
+ if (typeof process === "undefined" || !((_c = process.env) == null ? void 0 : _c.PLASMIC_QUIET)) {
251
250
  console.debug(
252
251
  `Plasmic: fetched designs for ${data.projects.map((p) => `"${p.name}" (${p.id}@${p.version})`).join(", ")}`
253
252
  );
@@ -277,7 +276,7 @@ function internal_getCachedBundleInNodeServer(opts) {
277
276
  function getBundleKey({
278
277
  host,
279
278
  platform,
280
- i18nKeyScheme,
279
+ i18n,
281
280
  preview,
282
281
  projects,
283
282
  skipHead
@@ -285,7 +284,7 @@ function getBundleKey({
285
284
  return JSON.stringify({
286
285
  host,
287
286
  platform,
288
- i18nKeyScheme,
287
+ i18nKeyScheme: i18n == null ? void 0 : i18n.keyScheme,
289
288
  preview,
290
289
  projects,
291
290
  skipHead
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/api.ts", "../src/fetcher.ts"],
4
- "sourcesContent": ["import unfetch 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 serverQueriesExecFuncFileName?: 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 canonical?: 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\n// Keep in sync with platform/wab ProjectMeta\nexport interface ProjectMeta {\n id: string;\n teamId?: string;\n indirect: boolean;\n name: string;\n version: string;\n remoteFonts: FontMeta[];\n hasStyleTokenOverrides: boolean;\n styleTokensProviderFileName: string;\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\ninterface BareSplit {\n id: string;\n projectId: string;\n name: string;\n externalId?: string;\n description?: string;\n pagesPaths: string[];\n}\n\nexport interface ExperimentSplit extends BareSplit {\n type: \"experiment\";\n slices: ExperimentSlice[];\n}\n\nexport interface SegmentSplit extends BareSplit {\n type: \"segment\";\n slices: SegmentSlice[];\n}\n\nexport type Split = ExperimentSplit | SegmentSplit;\n\ninterface ApiLoaderBundleOutput {\n modules: {\n browser: (CodeModule | AssetModule)[];\n server: (CodeModule | AssetModule)[];\n };\n components: ComponentMeta[];\n globalGroups: GlobalGroupMeta[];\n projects: ProjectMeta[];\n activeSplits: Split[];\n bundleKey: string | null;\n deferChunksByDefault: boolean;\n disableRootLoadingBoundaryByDefault: boolean;\n redirectUrl?: string;\n}\n\nexport interface LoaderBundleOutput extends ApiLoaderBundleOutput {\n // A map from project ID to the list of component IDs that are not included in the bundle\n // this is used to know which components exist in the project, which allow us to properly\n // handle bundle merging being aware of the deleted components.\n filteredIds: Record<string, string[]>;\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 function transformApiLoaderBundleOutput(\n bundle: ApiLoaderBundleOutput\n): LoaderBundleOutput {\n return {\n ...bundle,\n filteredIds: Object.fromEntries(bundle.projects.map((p) => [p.id, []])),\n };\n}\n\nexport class Api {\n private readonly apiHost: string;\n private readonly cdnHost: string;\n private fetch: typeof globalThis.fetch;\n\n private lastResponse:\n | {\n bundle: LoaderBundleOutput;\n key: string;\n }\n | undefined = undefined;\n\n constructor(\n private opts: {\n projects: { id: string; token: string }[];\n host?: string;\n apiHost?: string;\n cdnHost?: string;\n nativeFetch?: boolean;\n manualRedirect?: boolean;\n }\n ) {\n this.apiHost =\n opts.apiHost ?? opts.host ?? \"https://codegen-origin.plasmic.app\";\n this.cdnHost = opts.cdnHost ?? opts.host ?? \"https://codegen.plasmic.app\";\n this.fetch = (\n opts.nativeFetch && globalThis.fetch ? globalThis.fetch : unfetch\n ).bind(globalThis);\n }\n\n async fetchLoaderData(\n projectIds: string[],\n opts: {\n platform?: \"react\" | \"nextjs\" | \"gatsby\";\n platformOptions?: {\n nextjs?: {\n appDir: boolean;\n };\n };\n preview?: boolean;\n browserOnly?: boolean;\n i18nKeyScheme?: \"content\" | \"hash\" | \"path\";\n i18nTagPrefix?: string;\n skipHead?: boolean;\n }\n ): Promise<LoaderBundleOutput> {\n const { platform, preview } = opts;\n const query = new URLSearchParams([\n [\"platform\", platform ?? \"react\"],\n ...(opts.platformOptions?.nextjs?.appDir\n ? [[\"nextjsAppDir\", \"true\"]]\n : []),\n ...projectIds.map((projectId) => [\"projectId\", projectId]),\n ...(opts.browserOnly ? [[\"browserOnly\", \"true\"]] : []),\n ...(opts.i18nKeyScheme ? [[\"i18nKeyScheme\", opts.i18nKeyScheme]] : []),\n ...(opts.i18nTagPrefix ? [[\"i18nTagPrefix\", opts.i18nTagPrefix]] : []),\n ...(opts.skipHead ? [[\"skipHead\", \"true\"]] : []),\n ]).toString();\n\n const host = preview ? this.apiHost : this.cdnHost;\n const url = preview\n ? `${host}/api/v1/loader/code/preview?${query}`\n : `${host}/api/v1/loader/code/published?${query}`;\n\n // We only expect a redirect when we're dealing with published mode, as there should be\n // a stable set of versions to be used. As in browser, we could receive a opaque response\n // with a redirect, we don't try to use last response in browser.\n const useLastReponse =\n // We consider that manualRedirect is true by default, only by setting it to false\n // we disable it.\n !(this.opts.manualRedirect === false) && !preview && !isBrowser;\n\n if (useLastReponse) {\n const redirectResp = await this.fetch(url, {\n method: \"GET\",\n headers: this.makeGetHeaders(),\n redirect: \"manual\",\n });\n\n if (redirectResp.status !== 301 && redirectResp.status !== 302) {\n const error = await this.parseJsonResponse(redirectResp);\n throw new Error(\n `Error fetching loader data, a redirect was expected: ${\n error?.error?.message ?? redirectResp.statusText\n }`\n );\n }\n\n const nextLocation = redirectResp.headers.get(\"location\");\n if (!nextLocation) {\n throw new Error(\n `Error fetching loader data, a redirect was expected but no location header was found`\n );\n }\n\n if (this.lastResponse?.key === nextLocation) {\n return this.lastResponse.bundle;\n }\n\n const resp = await this.fetch(`${host}${nextLocation}`, {\n method: \"GET\",\n headers: this.makeGetHeaders(),\n });\n\n const json = transformApiLoaderBundleOutput(\n await this.verifyAndParseJsonResponse(resp)\n );\n this.lastResponse = {\n bundle: json,\n key: nextLocation,\n };\n\n return json;\n }\n\n const resp = await this.fetch(url, {\n method: \"GET\",\n headers: this.makeGetHeaders(),\n });\n\n let json = await this.verifyAndParseJsonResponse(resp);\n\n // An Angular polyfill can cause 302 redirects to fail in Safari, due to missing headers.\n // This 200 response with `redirectUrl` is a workaround for specific projects that need it.\n if (json.redirectUrl) {\n const redirectResp = await this.fetch(`${host}${json.redirectUrl}`, {\n method: \"GET\",\n headers: this.makeGetHeaders(),\n });\n json = await this.verifyAndParseJsonResponse(redirectResp);\n }\n\n return transformApiLoaderBundleOutput(json);\n }\n\n private async verifyAndParseJsonResponse(\n resp: Response,\n errorText = \"Error fetching loader data\"\n ) {\n if (resp.status >= 400) {\n const error = await this.parseJsonResponse(resp);\n throw new Error(\n `${errorText}: ${error?.error?.message ?? resp.statusText}`\n );\n }\n return (await this.parseJsonResponse(resp)) as ApiLoaderBundleOutput;\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 /** @deprecated */\n async fetchHtmlData(_opts: {\n projectId: string;\n component: string;\n hydrate?: boolean;\n embedHydrate?: boolean;\n }): Promise<LoaderHtmlOutput> {\n throw new Error(\"deprecated\");\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 getChunksUrl(bundle: LoaderBundleOutput, modules: CodeModule[]) {\n return `${this.cdnHost}/api/v1/loader/chunks?bundleKey=${encodeURIComponent(\n bundle.bundleKey ?? \"null\"\n )}&fileName=${encodeURIComponent(\n modules\n .map((m) => m.fileName)\n .sort()\n .join(\",\")\n )}`;\n }\n}\n", "import { Api, CodeModule, 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 platformOptions?: {\n nextjs?: {\n appDir: boolean;\n };\n };\n preview?: boolean;\n /** Fallback for apiHost and cdnHost. */\n host?: string;\n /** Used for fetching/previewing unpublished content. */\n apiHost?: string;\n /** Used for fetching published content. */\n cdnHost?: 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 skipHead?: boolean;\n nativeFetch?: boolean;\n manualRedirect?: boolean;\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 apiHost: opts.apiHost,\n cdnHost: opts.cdnHost,\n nativeFetch: opts.nativeFetch,\n manualRedirect: opts.manualRedirect,\n });\n }\n\n getChunksUrl(bundle: LoaderBundleOutput, modules: CodeModule[]) {\n return this.api.getChunksUrl(bundle, modules);\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 const fetchPromise = this.doFetch();\n this.curFetch = fetchPromise;\n try {\n const data = await fetchPromise;\n return data;\n } finally {\n // Reset this.curFetch only if it still holds the original fetch promise\n if (this.curFetch === fetchPromise) {\n this.curFetch = undefined;\n }\n }\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 platformOptions: this.opts.platformOptions,\n preview: this.opts.preview,\n i18nKeyScheme: this.opts.i18n?.keyScheme ?? this.opts.i18nKeyScheme,\n i18nTagPrefix: this.opts.i18n?.tagPrefix,\n browserOnly: isBrowser,\n skipHead: this.opts.skipHead,\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 skipHead,\n}: FetcherOptions) {\n return JSON.stringify({\n host,\n platform,\n i18nKeyScheme,\n preview,\n projects,\n skipHead,\n });\n}\n\ninterface GlobalWithBundles {\n __PLASMIC_BUNDLES?: { [bundleKey: string]: LoaderBundleOutput };\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import unfetch 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 serverQueriesExecFuncFileName?: 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 canonical?: 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\n// Keep in sync with platform/wab ProjectMeta\nexport interface ProjectMeta {\n id: string;\n teamId?: string;\n indirect: boolean;\n name: string;\n version: string;\n remoteFonts: FontMeta[];\n hasStyleTokenOverrides: boolean;\n styleTokensProviderFileName: string;\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\ninterface BareSplit {\n id: string;\n projectId: string;\n name: string;\n externalId?: string;\n description?: string;\n pagesPaths: string[];\n}\n\nexport interface ExperimentSplit extends BareSplit {\n type: \"experiment\";\n slices: ExperimentSlice[];\n}\n\nexport interface SegmentSplit extends BareSplit {\n type: \"segment\";\n slices: SegmentSlice[];\n}\n\nexport type Split = ExperimentSplit | SegmentSplit;\n\ninterface ApiLoaderBundleOutput {\n modules: {\n browser: (CodeModule | AssetModule)[];\n server: (CodeModule | AssetModule)[];\n };\n components: ComponentMeta[];\n globalGroups: GlobalGroupMeta[];\n projects: ProjectMeta[];\n activeSplits: Split[];\n bundleKey: string | null;\n deferChunksByDefault: boolean;\n disableRootLoadingBoundaryByDefault: boolean;\n redirectUrl?: string;\n}\n\nexport interface LoaderBundleOutput extends ApiLoaderBundleOutput {\n // A map from project ID to the list of component IDs that are not included in the bundle\n // this is used to know which components exist in the project, which allow us to properly\n // handle bundle merging being aware of the deleted components.\n filteredIds: Record<string, 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 function transformApiLoaderBundleOutput(\n bundle: ApiLoaderBundleOutput\n): LoaderBundleOutput {\n return {\n ...bundle,\n filteredIds: Object.fromEntries(bundle.projects.map((p) => [p.id, []])),\n };\n}\n\nexport class Api {\n private readonly apiHost: string;\n private readonly cdnHost: string;\n private fetch: typeof globalThis.fetch;\n\n private lastResponse:\n | {\n bundle: LoaderBundleOutput;\n key: string;\n }\n | undefined = undefined;\n\n constructor(\n private opts: {\n projects: { id: string; token: string }[];\n host?: string;\n apiHost?: string;\n cdnHost?: string;\n nativeFetch?: boolean;\n manualRedirect?: boolean;\n }\n ) {\n this.apiHost =\n opts.apiHost ?? opts.host ?? \"https://codegen-origin.plasmic.app\";\n this.cdnHost = opts.cdnHost ?? opts.host ?? \"https://codegen.plasmic.app\";\n this.fetch = (\n opts.nativeFetch && globalThis.fetch ? globalThis.fetch : unfetch\n ).bind(globalThis);\n }\n\n async fetchLoaderData(\n projectIds: string[],\n opts: {\n platform?: \"react\" | \"nextjs\" | \"gatsby\";\n platformOptions?: {\n nextjs?: {\n appDir: boolean;\n };\n };\n preview?: boolean;\n browserOnly?: boolean;\n i18nKeyScheme?: \"content\" | \"hash\" | \"path\";\n i18nTagPrefix?: string;\n skipHead?: boolean;\n }\n ): Promise<LoaderBundleOutput> {\n const { platform, preview } = opts;\n const query = new URLSearchParams([\n [\"platform\", platform ?? \"react\"],\n ...(opts.platformOptions?.nextjs?.appDir\n ? [[\"nextjsAppDir\", \"true\"]]\n : []),\n ...projectIds.map((projectId) => [\"projectId\", projectId]),\n ...(opts.browserOnly ? [[\"browserOnly\", \"true\"]] : []),\n ...(opts.i18nKeyScheme ? [[\"i18nKeyScheme\", opts.i18nKeyScheme]] : []),\n ...(opts.i18nTagPrefix ? [[\"i18nTagPrefix\", opts.i18nTagPrefix]] : []),\n ...(opts.skipHead ? [[\"skipHead\", \"true\"]] : []),\n ]).toString();\n\n const host = preview ? this.apiHost : this.cdnHost;\n const url = preview\n ? `${host}/api/v1/loader/code/preview?${query}`\n : `${host}/api/v1/loader/code/published?${query}`;\n\n // We only expect a redirect when we're dealing with published mode, as there should be\n // a stable set of versions to be used. As in browser, we could receive a opaque response\n // with a redirect, we don't try to use last response in browser.\n const useLastReponse =\n // We consider that manualRedirect is true by default, only by setting it to false\n // we disable it.\n !(this.opts.manualRedirect === false) && !preview && !isBrowser;\n\n if (useLastReponse) {\n const redirectResp = await this.fetch(url, {\n method: \"GET\",\n headers: this.makeGetHeaders(),\n redirect: \"manual\",\n });\n\n if (redirectResp.status !== 301 && redirectResp.status !== 302) {\n const error = await this.parseJsonResponse(redirectResp);\n throw new Error(\n `Error fetching loader data, a redirect was expected: ${\n error?.error?.message ?? redirectResp.statusText\n }`\n );\n }\n\n const nextLocation = redirectResp.headers.get(\"location\");\n if (!nextLocation) {\n throw new Error(\n `Error fetching loader data, a redirect was expected but no location header was found`\n );\n }\n\n if (this.lastResponse?.key === nextLocation) {\n return this.lastResponse.bundle;\n }\n\n const resp = await this.fetch(`${host}${nextLocation}`, {\n method: \"GET\",\n headers: this.makeGetHeaders(),\n });\n\n const json = transformApiLoaderBundleOutput(\n await this.verifyAndParseJsonResponse(resp)\n );\n this.lastResponse = {\n bundle: json,\n key: nextLocation,\n };\n\n return json;\n }\n\n const resp = await this.fetch(url, {\n method: \"GET\",\n headers: this.makeGetHeaders(),\n });\n\n let json = await this.verifyAndParseJsonResponse(resp);\n\n // An Angular polyfill can cause 302 redirects to fail in Safari, due to missing headers.\n // This 200 response with `redirectUrl` is a workaround for specific projects that need it.\n if (json.redirectUrl) {\n const redirectResp = await this.fetch(`${host}${json.redirectUrl}`, {\n method: \"GET\",\n headers: this.makeGetHeaders(),\n });\n json = await this.verifyAndParseJsonResponse(redirectResp);\n }\n\n return transformApiLoaderBundleOutput(json);\n }\n\n private async verifyAndParseJsonResponse(\n resp: Response,\n errorText = \"Error fetching loader data\"\n ) {\n if (resp.status >= 400) {\n const error = await this.parseJsonResponse(resp);\n throw new Error(\n `${errorText}: ${error?.error?.message ?? resp.statusText}`\n );\n }\n return (await this.parseJsonResponse(resp)) as ApiLoaderBundleOutput;\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 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 getChunksUrl(bundle: LoaderBundleOutput, modules: CodeModule[]) {\n return `${this.cdnHost}/api/v1/loader/chunks?bundleKey=${encodeURIComponent(\n bundle.bundleKey ?? \"null\"\n )}&fileName=${encodeURIComponent(\n modules\n .map((m) => m.fileName)\n .sort()\n .join(\",\")\n )}`;\n }\n}\n", "import { Api, CodeModule, 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 platformOptions?: {\n nextjs?: {\n appDir: boolean;\n };\n };\n preview?: boolean;\n /** Fallback for apiHost and cdnHost. */\n host?: string;\n /** Used for fetching/previewing unpublished content. */\n apiHost?: string;\n /** Used for fetching published content. */\n cdnHost?: string;\n i18n?: {\n keyScheme: \"content\" | \"hash\" | \"path\";\n tagPrefix?: string;\n };\n skipHead?: boolean;\n nativeFetch?: boolean;\n manualRedirect?: boolean;\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 apiHost: opts.apiHost,\n cdnHost: opts.cdnHost,\n nativeFetch: opts.nativeFetch,\n manualRedirect: opts.manualRedirect,\n });\n }\n\n getChunksUrl(bundle: LoaderBundleOutput, modules: CodeModule[]) {\n return this.api.getChunksUrl(bundle, modules);\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 const fetchPromise = this.doFetch();\n this.curFetch = fetchPromise;\n try {\n const data = await fetchPromise;\n return data;\n } finally {\n // Reset this.curFetch only if it still holds the original fetch promise\n if (this.curFetch === fetchPromise) {\n this.curFetch = undefined;\n }\n }\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 platformOptions: this.opts.platformOptions,\n preview: this.opts.preview,\n i18nKeyScheme: this.opts.i18n?.keyScheme,\n i18nTagPrefix: this.opts.i18n?.tagPrefix,\n browserOnly: isBrowser,\n skipHead: this.opts.skipHead,\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 i18n,\n preview,\n projects,\n skipHead,\n}: FetcherOptions) {\n return JSON.stringify({\n host,\n platform,\n i18nKeyScheme: i18n?.keyScheme,\n preview,\n projects,\n skipHead,\n });\n}\n\ninterface GlobalWithBundles {\n __PLASMIC_BUNDLES?: { [bundleKey: string]: LoaderBundleOutput };\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["resp", "json"]
7
7
  }
package/dist/index.js CHANGED
@@ -43,6 +43,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
43
43
  mod
44
44
  ));
45
45
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
46
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
46
47
  var __async = (__this, __arguments, generator) => {
47
48
  return new Promise((resolve, reject) => {
48
49
  var fulfilled = (value) => {
@@ -65,13 +66,13 @@ var __async = (__this, __arguments, generator) => {
65
66
  };
66
67
 
67
68
  // src/index.ts
68
- var src_exports = {};
69
- __export(src_exports, {
69
+ var index_exports = {};
70
+ __export(index_exports, {
70
71
  Api: () => Api,
71
72
  PlasmicModulesFetcher: () => PlasmicModulesFetcher,
72
73
  internal_getCachedBundleInNodeServer: () => internal_getCachedBundleInNodeServer
73
74
  });
74
- module.exports = __toCommonJS(src_exports);
75
+ module.exports = __toCommonJS(index_exports);
75
76
 
76
77
  // src/api.ts
77
78
  var import_isomorphic_unfetch = __toESM(require("@plasmicapp/isomorphic-unfetch"));
@@ -84,8 +85,11 @@ function transformApiLoaderBundleOutput(bundle) {
84
85
  }
85
86
  var Api = class {
86
87
  constructor(opts) {
87
- this.opts = opts;
88
- this.lastResponse = void 0;
88
+ __publicField(this, "opts", opts);
89
+ __publicField(this, "apiHost");
90
+ __publicField(this, "cdnHost");
91
+ __publicField(this, "fetch");
92
+ __publicField(this, "lastResponse");
89
93
  var _a, _b, _c, _d;
90
94
  this.apiHost = (_b = (_a = opts.apiHost) != null ? _a : opts.host) != null ? _b : "https://codegen-origin.plasmic.app";
91
95
  this.cdnHost = (_d = (_c = opts.cdnHost) != null ? _c : opts.host) != null ? _d : "https://codegen.plasmic.app";
@@ -184,12 +188,6 @@ var Api = class {
184
188
  }
185
189
  });
186
190
  }
187
- /** @deprecated */
188
- fetchHtmlData(_opts) {
189
- return __async(this, null, function* () {
190
- throw new Error("deprecated");
191
- });
192
- }
193
191
  makeGetHeaders() {
194
192
  return __spreadValues({
195
193
  "x-plasmic-loader-version": VERSION
@@ -214,8 +212,9 @@ var Api = class {
214
212
  // src/fetcher.ts
215
213
  var PlasmicModulesFetcher = class {
216
214
  constructor(opts) {
217
- this.opts = opts;
218
- this.curFetch = void 0;
215
+ __publicField(this, "opts", opts);
216
+ __publicField(this, "api");
217
+ __publicField(this, "curFetch");
219
218
  this.api = new Api({
220
219
  projects: opts.projects,
221
220
  host: opts.host,
@@ -264,7 +263,7 @@ var PlasmicModulesFetcher = class {
264
263
  }
265
264
  doFetch() {
266
265
  return __async(this, null, function* () {
267
- var _a, _b, _c, _d;
266
+ var _a, _b, _c;
268
267
  const data = yield this.api.fetchLoaderData(
269
268
  this.opts.projects.map(
270
269
  (p) => p.version ? `${p.id}@${p.version}` : p.id
@@ -273,8 +272,8 @@ var PlasmicModulesFetcher = class {
273
272
  platform: this.opts.platform,
274
273
  platformOptions: this.opts.platformOptions,
275
274
  preview: this.opts.preview,
276
- i18nKeyScheme: (_b = (_a = this.opts.i18n) == null ? void 0 : _a.keyScheme) != null ? _b : this.opts.i18nKeyScheme,
277
- i18nTagPrefix: (_c = this.opts.i18n) == null ? void 0 : _c.tagPrefix,
275
+ i18nKeyScheme: (_a = this.opts.i18n) == null ? void 0 : _a.keyScheme,
276
+ i18nTagPrefix: (_b = this.opts.i18n) == null ? void 0 : _b.tagPrefix,
278
277
  browserOnly: isBrowser,
279
278
  skipHead: this.opts.skipHead
280
279
  }
@@ -282,7 +281,7 @@ var PlasmicModulesFetcher = class {
282
281
  if (this.opts.cache) {
283
282
  yield this.opts.cache.set(data);
284
283
  }
285
- if (typeof process === "undefined" || !((_d = process.env) == null ? void 0 : _d.PLASMIC_QUIET)) {
284
+ if (typeof process === "undefined" || !((_c = process.env) == null ? void 0 : _c.PLASMIC_QUIET)) {
286
285
  console.debug(
287
286
  `Plasmic: fetched designs for ${data.projects.map((p) => `"${p.name}" (${p.id}@${p.version})`).join(", ")}`
288
287
  );
@@ -312,7 +311,7 @@ function internal_getCachedBundleInNodeServer(opts) {
312
311
  function getBundleKey({
313
312
  host,
314
313
  platform,
315
- i18nKeyScheme,
314
+ i18n,
316
315
  preview,
317
316
  projects,
318
317
  skipHead
@@ -320,7 +319,7 @@ function getBundleKey({
320
319
  return JSON.stringify({
321
320
  host,
322
321
  platform,
323
- i18nKeyScheme,
322
+ i18nKeyScheme: i18n == null ? void 0 : i18n.keyScheme,
324
323
  preview,
325
324
  projects,
326
325
  skipHead
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 unfetch 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 serverQueriesExecFuncFileName?: 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 canonical?: 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\n// Keep in sync with platform/wab ProjectMeta\nexport interface ProjectMeta {\n id: string;\n teamId?: string;\n indirect: boolean;\n name: string;\n version: string;\n remoteFonts: FontMeta[];\n hasStyleTokenOverrides: boolean;\n styleTokensProviderFileName: string;\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\ninterface BareSplit {\n id: string;\n projectId: string;\n name: string;\n externalId?: string;\n description?: string;\n pagesPaths: string[];\n}\n\nexport interface ExperimentSplit extends BareSplit {\n type: \"experiment\";\n slices: ExperimentSlice[];\n}\n\nexport interface SegmentSplit extends BareSplit {\n type: \"segment\";\n slices: SegmentSlice[];\n}\n\nexport type Split = ExperimentSplit | SegmentSplit;\n\ninterface ApiLoaderBundleOutput {\n modules: {\n browser: (CodeModule | AssetModule)[];\n server: (CodeModule | AssetModule)[];\n };\n components: ComponentMeta[];\n globalGroups: GlobalGroupMeta[];\n projects: ProjectMeta[];\n activeSplits: Split[];\n bundleKey: string | null;\n deferChunksByDefault: boolean;\n disableRootLoadingBoundaryByDefault: boolean;\n redirectUrl?: string;\n}\n\nexport interface LoaderBundleOutput extends ApiLoaderBundleOutput {\n // A map from project ID to the list of component IDs that are not included in the bundle\n // this is used to know which components exist in the project, which allow us to properly\n // handle bundle merging being aware of the deleted components.\n filteredIds: Record<string, string[]>;\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 function transformApiLoaderBundleOutput(\n bundle: ApiLoaderBundleOutput\n): LoaderBundleOutput {\n return {\n ...bundle,\n filteredIds: Object.fromEntries(bundle.projects.map((p) => [p.id, []])),\n };\n}\n\nexport class Api {\n private readonly apiHost: string;\n private readonly cdnHost: string;\n private fetch: typeof globalThis.fetch;\n\n private lastResponse:\n | {\n bundle: LoaderBundleOutput;\n key: string;\n }\n | undefined = undefined;\n\n constructor(\n private opts: {\n projects: { id: string; token: string }[];\n host?: string;\n apiHost?: string;\n cdnHost?: string;\n nativeFetch?: boolean;\n manualRedirect?: boolean;\n }\n ) {\n this.apiHost =\n opts.apiHost ?? opts.host ?? \"https://codegen-origin.plasmic.app\";\n this.cdnHost = opts.cdnHost ?? opts.host ?? \"https://codegen.plasmic.app\";\n this.fetch = (\n opts.nativeFetch && globalThis.fetch ? globalThis.fetch : unfetch\n ).bind(globalThis);\n }\n\n async fetchLoaderData(\n projectIds: string[],\n opts: {\n platform?: \"react\" | \"nextjs\" | \"gatsby\";\n platformOptions?: {\n nextjs?: {\n appDir: boolean;\n };\n };\n preview?: boolean;\n browserOnly?: boolean;\n i18nKeyScheme?: \"content\" | \"hash\" | \"path\";\n i18nTagPrefix?: string;\n skipHead?: boolean;\n }\n ): Promise<LoaderBundleOutput> {\n const { platform, preview } = opts;\n const query = new URLSearchParams([\n [\"platform\", platform ?? \"react\"],\n ...(opts.platformOptions?.nextjs?.appDir\n ? [[\"nextjsAppDir\", \"true\"]]\n : []),\n ...projectIds.map((projectId) => [\"projectId\", projectId]),\n ...(opts.browserOnly ? [[\"browserOnly\", \"true\"]] : []),\n ...(opts.i18nKeyScheme ? [[\"i18nKeyScheme\", opts.i18nKeyScheme]] : []),\n ...(opts.i18nTagPrefix ? [[\"i18nTagPrefix\", opts.i18nTagPrefix]] : []),\n ...(opts.skipHead ? [[\"skipHead\", \"true\"]] : []),\n ]).toString();\n\n const host = preview ? this.apiHost : this.cdnHost;\n const url = preview\n ? `${host}/api/v1/loader/code/preview?${query}`\n : `${host}/api/v1/loader/code/published?${query}`;\n\n // We only expect a redirect when we're dealing with published mode, as there should be\n // a stable set of versions to be used. As in browser, we could receive a opaque response\n // with a redirect, we don't try to use last response in browser.\n const useLastReponse =\n // We consider that manualRedirect is true by default, only by setting it to false\n // we disable it.\n !(this.opts.manualRedirect === false) && !preview && !isBrowser;\n\n if (useLastReponse) {\n const redirectResp = await this.fetch(url, {\n method: \"GET\",\n headers: this.makeGetHeaders(),\n redirect: \"manual\",\n });\n\n if (redirectResp.status !== 301 && redirectResp.status !== 302) {\n const error = await this.parseJsonResponse(redirectResp);\n throw new Error(\n `Error fetching loader data, a redirect was expected: ${\n error?.error?.message ?? redirectResp.statusText\n }`\n );\n }\n\n const nextLocation = redirectResp.headers.get(\"location\");\n if (!nextLocation) {\n throw new Error(\n `Error fetching loader data, a redirect was expected but no location header was found`\n );\n }\n\n if (this.lastResponse?.key === nextLocation) {\n return this.lastResponse.bundle;\n }\n\n const resp = await this.fetch(`${host}${nextLocation}`, {\n method: \"GET\",\n headers: this.makeGetHeaders(),\n });\n\n const json = transformApiLoaderBundleOutput(\n await this.verifyAndParseJsonResponse(resp)\n );\n this.lastResponse = {\n bundle: json,\n key: nextLocation,\n };\n\n return json;\n }\n\n const resp = await this.fetch(url, {\n method: \"GET\",\n headers: this.makeGetHeaders(),\n });\n\n let json = await this.verifyAndParseJsonResponse(resp);\n\n // An Angular polyfill can cause 302 redirects to fail in Safari, due to missing headers.\n // This 200 response with `redirectUrl` is a workaround for specific projects that need it.\n if (json.redirectUrl) {\n const redirectResp = await this.fetch(`${host}${json.redirectUrl}`, {\n method: \"GET\",\n headers: this.makeGetHeaders(),\n });\n json = await this.verifyAndParseJsonResponse(redirectResp);\n }\n\n return transformApiLoaderBundleOutput(json);\n }\n\n private async verifyAndParseJsonResponse(\n resp: Response,\n errorText = \"Error fetching loader data\"\n ) {\n if (resp.status >= 400) {\n const error = await this.parseJsonResponse(resp);\n throw new Error(\n `${errorText}: ${error?.error?.message ?? resp.statusText}`\n );\n }\n return (await this.parseJsonResponse(resp)) as ApiLoaderBundleOutput;\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 /** @deprecated */\n async fetchHtmlData(_opts: {\n projectId: string;\n component: string;\n hydrate?: boolean;\n embedHydrate?: boolean;\n }): Promise<LoaderHtmlOutput> {\n throw new Error(\"deprecated\");\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 getChunksUrl(bundle: LoaderBundleOutput, modules: CodeModule[]) {\n return `${this.cdnHost}/api/v1/loader/chunks?bundleKey=${encodeURIComponent(\n bundle.bundleKey ?? \"null\"\n )}&fileName=${encodeURIComponent(\n modules\n .map((m) => m.fileName)\n .sort()\n .join(\",\")\n )}`;\n }\n}\n", "import { Api, CodeModule, 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 platformOptions?: {\n nextjs?: {\n appDir: boolean;\n };\n };\n preview?: boolean;\n /** Fallback for apiHost and cdnHost. */\n host?: string;\n /** Used for fetching/previewing unpublished content. */\n apiHost?: string;\n /** Used for fetching published content. */\n cdnHost?: 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 skipHead?: boolean;\n nativeFetch?: boolean;\n manualRedirect?: boolean;\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 apiHost: opts.apiHost,\n cdnHost: opts.cdnHost,\n nativeFetch: opts.nativeFetch,\n manualRedirect: opts.manualRedirect,\n });\n }\n\n getChunksUrl(bundle: LoaderBundleOutput, modules: CodeModule[]) {\n return this.api.getChunksUrl(bundle, modules);\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 const fetchPromise = this.doFetch();\n this.curFetch = fetchPromise;\n try {\n const data = await fetchPromise;\n return data;\n } finally {\n // Reset this.curFetch only if it still holds the original fetch promise\n if (this.curFetch === fetchPromise) {\n this.curFetch = undefined;\n }\n }\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 platformOptions: this.opts.platformOptions,\n preview: this.opts.preview,\n i18nKeyScheme: this.opts.i18n?.keyScheme ?? this.opts.i18nKeyScheme,\n i18nTagPrefix: this.opts.i18n?.tagPrefix,\n browserOnly: isBrowser,\n skipHead: this.opts.skipHead,\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 skipHead,\n}: FetcherOptions) {\n return JSON.stringify({\n host,\n platform,\n i18nKeyScheme,\n preview,\n projects,\n skipHead,\n });\n}\n\ninterface GlobalWithBundles {\n __PLASMIC_BUNDLES?: { [bundleKey: string]: LoaderBundleOutput };\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["export { Api } from \"./api\";\nexport type {\n AssetModule,\n CodeModule,\n ComponentMeta,\n ExperimentSlice,\n FontMeta,\n GlobalGroupMeta,\n LoaderBundleOutput,\n PageMeta,\n PageMetadata,\n ProjectMeta,\n SegmentSlice,\n Split,\n} from \"./api\";\nexport {\n PlasmicModulesFetcher,\n internal_getCachedBundleInNodeServer,\n} from \"./fetcher\";\nexport type { FetcherOptions, LoaderBundleCache } from \"./fetcher\";\n", "import unfetch 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 serverQueriesExecFuncFileName?: 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 canonical?: 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\n// Keep in sync with platform/wab ProjectMeta\nexport interface ProjectMeta {\n id: string;\n teamId?: string;\n indirect: boolean;\n name: string;\n version: string;\n remoteFonts: FontMeta[];\n hasStyleTokenOverrides: boolean;\n styleTokensProviderFileName: string;\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\ninterface BareSplit {\n id: string;\n projectId: string;\n name: string;\n externalId?: string;\n description?: string;\n pagesPaths: string[];\n}\n\nexport interface ExperimentSplit extends BareSplit {\n type: \"experiment\";\n slices: ExperimentSlice[];\n}\n\nexport interface SegmentSplit extends BareSplit {\n type: \"segment\";\n slices: SegmentSlice[];\n}\n\nexport type Split = ExperimentSplit | SegmentSplit;\n\ninterface ApiLoaderBundleOutput {\n modules: {\n browser: (CodeModule | AssetModule)[];\n server: (CodeModule | AssetModule)[];\n };\n components: ComponentMeta[];\n globalGroups: GlobalGroupMeta[];\n projects: ProjectMeta[];\n activeSplits: Split[];\n bundleKey: string | null;\n deferChunksByDefault: boolean;\n disableRootLoadingBoundaryByDefault: boolean;\n redirectUrl?: string;\n}\n\nexport interface LoaderBundleOutput extends ApiLoaderBundleOutput {\n // A map from project ID to the list of component IDs that are not included in the bundle\n // this is used to know which components exist in the project, which allow us to properly\n // handle bundle merging being aware of the deleted components.\n filteredIds: Record<string, 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 function transformApiLoaderBundleOutput(\n bundle: ApiLoaderBundleOutput\n): LoaderBundleOutput {\n return {\n ...bundle,\n filteredIds: Object.fromEntries(bundle.projects.map((p) => [p.id, []])),\n };\n}\n\nexport class Api {\n private readonly apiHost: string;\n private readonly cdnHost: string;\n private fetch: typeof globalThis.fetch;\n\n private lastResponse:\n | {\n bundle: LoaderBundleOutput;\n key: string;\n }\n | undefined = undefined;\n\n constructor(\n private opts: {\n projects: { id: string; token: string }[];\n host?: string;\n apiHost?: string;\n cdnHost?: string;\n nativeFetch?: boolean;\n manualRedirect?: boolean;\n }\n ) {\n this.apiHost =\n opts.apiHost ?? opts.host ?? \"https://codegen-origin.plasmic.app\";\n this.cdnHost = opts.cdnHost ?? opts.host ?? \"https://codegen.plasmic.app\";\n this.fetch = (\n opts.nativeFetch && globalThis.fetch ? globalThis.fetch : unfetch\n ).bind(globalThis);\n }\n\n async fetchLoaderData(\n projectIds: string[],\n opts: {\n platform?: \"react\" | \"nextjs\" | \"gatsby\";\n platformOptions?: {\n nextjs?: {\n appDir: boolean;\n };\n };\n preview?: boolean;\n browserOnly?: boolean;\n i18nKeyScheme?: \"content\" | \"hash\" | \"path\";\n i18nTagPrefix?: string;\n skipHead?: boolean;\n }\n ): Promise<LoaderBundleOutput> {\n const { platform, preview } = opts;\n const query = new URLSearchParams([\n [\"platform\", platform ?? \"react\"],\n ...(opts.platformOptions?.nextjs?.appDir\n ? [[\"nextjsAppDir\", \"true\"]]\n : []),\n ...projectIds.map((projectId) => [\"projectId\", projectId]),\n ...(opts.browserOnly ? [[\"browserOnly\", \"true\"]] : []),\n ...(opts.i18nKeyScheme ? [[\"i18nKeyScheme\", opts.i18nKeyScheme]] : []),\n ...(opts.i18nTagPrefix ? [[\"i18nTagPrefix\", opts.i18nTagPrefix]] : []),\n ...(opts.skipHead ? [[\"skipHead\", \"true\"]] : []),\n ]).toString();\n\n const host = preview ? this.apiHost : this.cdnHost;\n const url = preview\n ? `${host}/api/v1/loader/code/preview?${query}`\n : `${host}/api/v1/loader/code/published?${query}`;\n\n // We only expect a redirect when we're dealing with published mode, as there should be\n // a stable set of versions to be used. As in browser, we could receive a opaque response\n // with a redirect, we don't try to use last response in browser.\n const useLastReponse =\n // We consider that manualRedirect is true by default, only by setting it to false\n // we disable it.\n !(this.opts.manualRedirect === false) && !preview && !isBrowser;\n\n if (useLastReponse) {\n const redirectResp = await this.fetch(url, {\n method: \"GET\",\n headers: this.makeGetHeaders(),\n redirect: \"manual\",\n });\n\n if (redirectResp.status !== 301 && redirectResp.status !== 302) {\n const error = await this.parseJsonResponse(redirectResp);\n throw new Error(\n `Error fetching loader data, a redirect was expected: ${\n error?.error?.message ?? redirectResp.statusText\n }`\n );\n }\n\n const nextLocation = redirectResp.headers.get(\"location\");\n if (!nextLocation) {\n throw new Error(\n `Error fetching loader data, a redirect was expected but no location header was found`\n );\n }\n\n if (this.lastResponse?.key === nextLocation) {\n return this.lastResponse.bundle;\n }\n\n const resp = await this.fetch(`${host}${nextLocation}`, {\n method: \"GET\",\n headers: this.makeGetHeaders(),\n });\n\n const json = transformApiLoaderBundleOutput(\n await this.verifyAndParseJsonResponse(resp)\n );\n this.lastResponse = {\n bundle: json,\n key: nextLocation,\n };\n\n return json;\n }\n\n const resp = await this.fetch(url, {\n method: \"GET\",\n headers: this.makeGetHeaders(),\n });\n\n let json = await this.verifyAndParseJsonResponse(resp);\n\n // An Angular polyfill can cause 302 redirects to fail in Safari, due to missing headers.\n // This 200 response with `redirectUrl` is a workaround for specific projects that need it.\n if (json.redirectUrl) {\n const redirectResp = await this.fetch(`${host}${json.redirectUrl}`, {\n method: \"GET\",\n headers: this.makeGetHeaders(),\n });\n json = await this.verifyAndParseJsonResponse(redirectResp);\n }\n\n return transformApiLoaderBundleOutput(json);\n }\n\n private async verifyAndParseJsonResponse(\n resp: Response,\n errorText = \"Error fetching loader data\"\n ) {\n if (resp.status >= 400) {\n const error = await this.parseJsonResponse(resp);\n throw new Error(\n `${errorText}: ${error?.error?.message ?? resp.statusText}`\n );\n }\n return (await this.parseJsonResponse(resp)) as ApiLoaderBundleOutput;\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 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 getChunksUrl(bundle: LoaderBundleOutput, modules: CodeModule[]) {\n return `${this.cdnHost}/api/v1/loader/chunks?bundleKey=${encodeURIComponent(\n bundle.bundleKey ?? \"null\"\n )}&fileName=${encodeURIComponent(\n modules\n .map((m) => m.fileName)\n .sort()\n .join(\",\")\n )}`;\n }\n}\n", "import { Api, CodeModule, 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 platformOptions?: {\n nextjs?: {\n appDir: boolean;\n };\n };\n preview?: boolean;\n /** Fallback for apiHost and cdnHost. */\n host?: string;\n /** Used for fetching/previewing unpublished content. */\n apiHost?: string;\n /** Used for fetching published content. */\n cdnHost?: string;\n i18n?: {\n keyScheme: \"content\" | \"hash\" | \"path\";\n tagPrefix?: string;\n };\n skipHead?: boolean;\n nativeFetch?: boolean;\n manualRedirect?: boolean;\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 apiHost: opts.apiHost,\n cdnHost: opts.cdnHost,\n nativeFetch: opts.nativeFetch,\n manualRedirect: opts.manualRedirect,\n });\n }\n\n getChunksUrl(bundle: LoaderBundleOutput, modules: CodeModule[]) {\n return this.api.getChunksUrl(bundle, modules);\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 const fetchPromise = this.doFetch();\n this.curFetch = fetchPromise;\n try {\n const data = await fetchPromise;\n return data;\n } finally {\n // Reset this.curFetch only if it still holds the original fetch promise\n if (this.curFetch === fetchPromise) {\n this.curFetch = undefined;\n }\n }\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 platformOptions: this.opts.platformOptions,\n preview: this.opts.preview,\n i18nKeyScheme: this.opts.i18n?.keyScheme,\n i18nTagPrefix: this.opts.i18n?.tagPrefix,\n browserOnly: isBrowser,\n skipHead: this.opts.skipHead,\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 i18n,\n preview,\n projects,\n skipHead,\n}: FetcherOptions) {\n return JSON.stringify({\n host,\n platform,\n i18nKeyScheme: i18n?.keyScheme,\n preview,\n projects,\n skipHead,\n });\n}\n\ninterface GlobalWithBundles {\n __PLASMIC_BUNDLES?: { [bundleKey: string]: LoaderBundleOutput };\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["unfetch", "resp", "json"]
7
7
  }
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.0.60",
2
+ "version": "2.0.1",
3
3
  "license": "MIT",
4
4
  "types": "./dist/index.d.ts",
5
5
  "main": "./dist/index.js",
@@ -18,11 +18,11 @@
18
18
  "node": ">=10"
19
19
  },
20
20
  "scripts": {
21
- "build": "yarn build:types && yarn build:index",
22
- "build:types": "yarn tsc",
21
+ "build": "pnpm build:types && pnpm build:index",
22
+ "build:types": "tsc",
23
23
  "build:index": "node ../../build.mjs ./src/index.ts",
24
24
  "yalcp": "yalc publish --push",
25
- "test": "TEST_CWD=`pwd` yarn --cwd=../.. test",
25
+ "test": "TEST_CWD=`pwd` pnpm -w test",
26
26
  "lint": "eslint",
27
27
  "prepublishOnly": "npm run build",
28
28
  "postpublish": "bash ../../scripts/publish-api-doc-model.sh",
@@ -47,5 +47,5 @@
47
47
  "publishConfig": {
48
48
  "access": "public"
49
49
  },
50
- "gitHead": "39fee33309bd526e7347a21890fffe646aca074b"
50
+ "gitHead": "6087f1621240c66b20d4a8fcf02c8bf889c554aa"
51
51
  }