@plasmicpkgs/cms 0.0.7 → 0.0.9

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
@@ -33,6 +33,11 @@ export declare interface _ApiCmsTable {
33
33
  schema: _CmsTableSchema;
34
34
  }
35
35
 
36
+ declare interface BaseCMSOpts {
37
+ cmsId?: string;
38
+ cmsPublicToken?: string;
39
+ }
40
+
36
41
  export declare interface _CmsBaseType<T> {
37
42
  /** The stable unique identifier, like `heroImage`. */
38
43
  identifier: string;
@@ -127,6 +132,10 @@ export declare interface _CmsRichText extends _CmsBaseType<string> {
127
132
  defaultValue?: string;
128
133
  }
129
134
 
135
+ declare interface CMSTableOpts extends BaseCMSOpts {
136
+ tableId?: string;
137
+ }
138
+
130
139
  export declare interface _CmsTableSchema {
131
140
  fields: _CmsFieldMeta[];
132
141
  }
@@ -153,11 +162,27 @@ export declare interface _DatabaseConfig {
153
162
 
154
163
  export declare const _DEFAULT_HOST = "https://data.plasmic.app";
155
164
 
156
- export declare function fetchContent(cmsId?: string, cmsPublicToken?: string, tableId?: string, select?: string[], whereLogic?: RulesLogic, orderBy?: string, orderDirection?: "asc" | "desc", limit?: number, offset?: number, useDraft?: boolean, locale?: string): Promise<ApiCmsRow[]>;
165
+ export declare function fetchContent({ cmsId, cmsPublicToken, tableId, select, whereLogic, orderBy, orderDirection, limit, offset, useDraft, locale, }: FetchContentOpts): Promise<ApiCmsRow[]>;
166
+
167
+ declare interface FetchContentOpts extends CMSTableOpts {
168
+ select?: string[];
169
+ whereLogic?: RulesLogic;
170
+ orderBy?: string;
171
+ orderDirection?: "asc" | "desc";
172
+ limit?: number;
173
+ offset?: number;
174
+ useDraft?: boolean;
175
+ locale?: string;
176
+ }
177
+
178
+ export declare function fetchCount({ cmsId, cmsPublicToken, tableId, useDraft, whereLogic, }: FetchCountOpts): Promise<number>;
157
179
 
158
- export declare function fetchCount(cmsId?: string, cmsPublicToken?: string, tableId?: string, whereLogic?: RulesLogic, useDraft?: boolean): Promise<number>;
180
+ declare interface FetchCountOpts extends CMSTableOpts {
181
+ whereLogic?: RulesLogic;
182
+ useDraft?: boolean;
183
+ }
159
184
 
160
- export declare function fetchTables(cmsId: string, cmsPublicToken: string): Promise<_ApiCmsTable[]>;
185
+ export declare function fetchTables({ cmsId, cmsPublicToken }: BaseCMSOpts): Promise<_ApiCmsTable[]>;
161
186
 
162
187
  declare type FilterClause = any;
163
188
 
@@ -168,7 +193,10 @@ export declare class _HttpError extends Error {
168
193
 
169
194
  export declare function _mkApi(config: _DatabaseConfig | undefined): _API;
170
195
 
171
- export declare function _mkFieldOptions(tables: _ApiCmsTable[] | undefined, tableIdentifier: string | undefined, types?: _CmsType[]): ValueLabelPair[];
196
+ export declare function _mkFieldOptions(tables: _ApiCmsTable[] | undefined, tableIdentifier: string | undefined, types?: _CmsType[], opts?: {
197
+ includeSystemId?: boolean;
198
+ includeRefStars?: boolean;
199
+ }): ValueLabelPair[];
172
200
 
173
201
  export declare function _mkTableOptions(tables: _ApiCmsTable[] | undefined): ValueLabelPair[];
174
202
 
package/dist/index.esm.js CHANGED
@@ -144,6 +144,24 @@ function mkApi(config) {
144
144
  // src/constants.ts
145
145
  var DEFAULT_HOST = "https://data.plasmic.app";
146
146
 
147
+ // src/schema.ts
148
+ var CmsMetaType = /* @__PURE__ */ ((CmsMetaType2) => {
149
+ CmsMetaType2["TEXT"] = "text";
150
+ CmsMetaType2["LONG_TEXT"] = "long-text";
151
+ CmsMetaType2["NUMBER"] = "number";
152
+ CmsMetaType2["IMAGE"] = "image";
153
+ CmsMetaType2["FILE"] = "file";
154
+ CmsMetaType2["DATE_TIME"] = "date-time";
155
+ CmsMetaType2["BOOLEAN"] = "boolean";
156
+ CmsMetaType2["COLOR"] = "color";
157
+ CmsMetaType2["RICH_TEXT"] = "rich-text";
158
+ CmsMetaType2["REF"] = "ref";
159
+ CmsMetaType2["LIST"] = "list";
160
+ CmsMetaType2["OBJECT"] = "object";
161
+ CmsMetaType2["ENUM"] = "enum";
162
+ return CmsMetaType2;
163
+ })(CmsMetaType || {});
164
+
147
165
  // src/util.ts
148
166
  function mkTableOptions(tables) {
149
167
  if (!tables) {
@@ -154,7 +172,7 @@ function mkTableOptions(tables) {
154
172
  label: table.name
155
173
  }));
156
174
  }
157
- function mkFieldOptions(tables, tableIdentifier, types) {
175
+ function mkFieldOptions(tables, tableIdentifier, types, opts) {
158
176
  if (!tables) {
159
177
  return [];
160
178
  }
@@ -166,11 +184,17 @@ function mkFieldOptions(tables, tableIdentifier, types) {
166
184
  if (types) {
167
185
  fields = fields.filter((f) => types.includes(f.type));
168
186
  }
169
- const options = fields.map((f) => ({
170
- value: f.identifier,
171
- label: f.label || f.identifier
172
- }));
173
- if (!options.some((option) => option.value === "_id")) {
187
+ const options = [
188
+ // single fields
189
+ ...fields.map((f) => ({
190
+ value: f.identifier,
191
+ label: f.label || f.identifier
192
+ })),
193
+ // ref star fields
194
+ ...(opts == null ? void 0 : opts.includeRefStars) ? mkRefStarFieldOptions([], fields) : []
195
+ ];
196
+ options.sort((a, b) => a.label.localeCompare(b.label));
197
+ if ((opts == null ? void 0 : opts.includeSystemId) && !options.some((option) => option.value === "_id")) {
174
198
  options.push({
175
199
  label: "System ID",
176
200
  value: "_id"
@@ -178,24 +202,26 @@ function mkFieldOptions(tables, tableIdentifier, types) {
178
202
  }
179
203
  return options;
180
204
  }
181
-
182
- // src/schema.ts
183
- var CmsMetaType = /* @__PURE__ */ ((CmsMetaType2) => {
184
- CmsMetaType2["TEXT"] = "text";
185
- CmsMetaType2["LONG_TEXT"] = "long-text";
186
- CmsMetaType2["NUMBER"] = "number";
187
- CmsMetaType2["IMAGE"] = "image";
188
- CmsMetaType2["FILE"] = "file";
189
- CmsMetaType2["DATE_TIME"] = "date-time";
190
- CmsMetaType2["BOOLEAN"] = "boolean";
191
- CmsMetaType2["COLOR"] = "color";
192
- CmsMetaType2["RICH_TEXT"] = "rich-text";
193
- CmsMetaType2["REF"] = "ref";
194
- CmsMetaType2["LIST"] = "list";
195
- CmsMetaType2["OBJECT"] = "object";
196
- CmsMetaType2["ENUM"] = "enum";
197
- return CmsMetaType2;
198
- })(CmsMetaType || {});
205
+ function mkRefStarFieldOptions(fieldPath, nextFields) {
206
+ return nextFields.flatMap((nestedField) => {
207
+ if (nestedField.type === "ref" /* REF */) {
208
+ const fieldPathToRef = [...fieldPath, nestedField];
209
+ return [
210
+ {
211
+ value: fieldPathToRef.map((f) => f.identifier).join(".") + ".*",
212
+ label: fieldPathToRef.map((f) => f.label || f.identifier).join(".") + ".*"
213
+ }
214
+ ];
215
+ } else if (nestedField.type === "list" /* LIST */ || nestedField.type === "object" /* OBJECT */) {
216
+ return mkRefStarFieldOptions(
217
+ [...fieldPath, nestedField],
218
+ nestedField.fields
219
+ );
220
+ } else {
221
+ return [];
222
+ }
223
+ });
224
+ }
199
225
 
200
226
  // src/where.ts
201
227
  function cmsTableToQueryBuilderConfig(table) {
@@ -330,7 +356,7 @@ function getCmsHost() {
330
356
  var _a;
331
357
  return (_a = globalThis["__PLASMIC_CMS_HOST__"]) != null ? _a : DEFAULT_HOST;
332
358
  }
333
- function sharedTableFnContext(cmsId, cmsPublicToken, ..._args) {
359
+ function sharedTableFnContext({ cmsId, cmsPublicToken } = {}) {
334
360
  if (!cmsId || !cmsPublicToken) {
335
361
  return {
336
362
  dataKey: "",
@@ -356,17 +382,16 @@ function sharedTableFnContext(cmsId, cmsPublicToken, ..._args) {
356
382
  };
357
383
  }
358
384
  var cmsIdParam = {
359
- name: "cmsId",
360
385
  type: "string",
361
- description: "Find the CMS ID on the Plasmic CMS settings page."
386
+ description: "ID of the CMS.",
387
+ helpText: "Find the CMS ID on the [Plasmic CMS settings page](https://docs.plasmic.app/learn/plasmic-cms-api-reference/#find-your-cms-ids-public-token-and-secret-token)"
362
388
  };
363
389
  var cmsPublicTokenParam = {
364
- name: "cmsPublicToken",
365
390
  type: "string",
366
- description: "Find the Public Token on the Plasmic CMS settings page."
391
+ description: "Public token of the CMS.",
392
+ helpText: "Find the public token on the [Plasmic CMS settings page](https://docs.plasmic.app/learn/plasmic-cms-api-reference/#find-your-cms-ids-public-token-and-secret-token)"
367
393
  };
368
394
  var tableIdParam = {
369
- name: "tableId",
370
395
  type: "choice",
371
396
  options: (_args, ctx) => {
372
397
  if (!(ctx == null ? void 0 : ctx.tables)) {
@@ -379,22 +404,22 @@ var tableIdParam = {
379
404
  }
380
405
  };
381
406
  var selectParam = {
382
- name: "select",
383
407
  type: "choice",
384
408
  multiSelect: true,
385
409
  description: "Fields to fetch. Defaults to all fields.",
386
410
  defaultValueHint: ["Default: *"],
387
- options: (args, ctx) => {
388
- const tableId = args[2];
389
- return mkFieldOptions(ctx.tables, tableId);
411
+ options: ([opts], ctx) => {
412
+ const tableId = opts == null ? void 0 : opts.tableId;
413
+ return mkFieldOptions(ctx.tables, tableId, void 0, {
414
+ includeRefStars: true
415
+ });
390
416
  }
391
417
  };
392
418
  var whereLogicParam = {
393
- name: "where",
394
419
  type: "queryBuilder",
395
420
  description: "Filter fetched entries. Defaults to fetch all entries.",
396
- config: (args, ctx) => {
397
- const tableId = args[2];
421
+ config: ([opts], ctx) => {
422
+ const tableId = opts == null ? void 0 : opts.tableId;
398
423
  const table = ctx.tables.find((t) => t.identifier === tableId);
399
424
  if (table) {
400
425
  return cmsTableToQueryBuilderConfig(table);
@@ -404,16 +429,16 @@ var whereLogicParam = {
404
429
  }
405
430
  };
406
431
  var orderByParam = {
407
- name: "orderBy",
408
432
  type: "choice",
409
433
  description: "Field to order entries by. Defaults to creation order.",
410
- options: (args, ctx) => {
411
- const tableId = args[2];
412
- return mkFieldOptions(ctx.tables, tableId);
434
+ options: ([opts], ctx) => {
435
+ const tableId = opts == null ? void 0 : opts.tableId;
436
+ return mkFieldOptions(ctx.tables, tableId, void 0, {
437
+ includeRefStars: true
438
+ });
413
439
  }
414
440
  };
415
441
  var orderDirectionParam = {
416
- name: "orderDirection",
417
442
  label: "Direction",
418
443
  type: "choice",
419
444
  options: [
@@ -429,29 +454,28 @@ var orderDirectionParam = {
429
454
  defaultValueHint: "Default: Ascending"
430
455
  };
431
456
  var limitParam = {
432
- name: "limit",
433
457
  type: "number",
434
458
  description: "Maximum number of entries to fetch."
435
459
  };
436
460
  var offsetParam = {
437
- name: "offset",
438
461
  type: "number",
439
462
  description: "Number of entries to skip.",
440
463
  defaultValueHint: 0
441
464
  };
442
465
  var useDraftParam = {
443
- name: "useDraft",
444
466
  type: "boolean",
445
467
  description: "Whether to use draft data.",
446
468
  defaultValueHint: false
447
469
  };
448
470
  var localeParam = {
449
- name: "locale",
450
471
  type: "string",
451
472
  description: "The locale to use. Defaults to base locale."
452
473
  };
453
- function fetchTables(cmsId, cmsPublicToken) {
454
- return __async(this, null, function* () {
474
+ function fetchTables(_0) {
475
+ return __async(this, arguments, function* ({ cmsId, cmsPublicToken }) {
476
+ if (!cmsId || !cmsPublicToken) {
477
+ return [];
478
+ }
455
479
  const api = mkApi({
456
480
  databaseId: cmsId,
457
481
  databaseToken: cmsPublicToken,
@@ -460,8 +484,20 @@ function fetchTables(cmsId, cmsPublicToken) {
460
484
  return api.fetchTables();
461
485
  });
462
486
  }
463
- function fetchContent(cmsId, cmsPublicToken, tableId, select, whereLogic, orderBy, orderDirection, limit, offset, useDraft, locale) {
464
- return __async(this, null, function* () {
487
+ function fetchContent(_0) {
488
+ return __async(this, arguments, function* ({
489
+ cmsId,
490
+ cmsPublicToken,
491
+ tableId,
492
+ select,
493
+ whereLogic,
494
+ orderBy,
495
+ orderDirection,
496
+ limit,
497
+ offset,
498
+ useDraft,
499
+ locale
500
+ }) {
465
501
  if (!cmsId || !cmsPublicToken || !tableId) {
466
502
  return [];
467
503
  }
@@ -482,8 +518,14 @@ function fetchContent(cmsId, cmsPublicToken, tableId, select, whereLogic, orderB
482
518
  });
483
519
  });
484
520
  }
485
- function fetchCount(cmsId, cmsPublicToken, tableId, whereLogic, useDraft) {
486
- return __async(this, null, function* () {
521
+ function fetchCount(_0) {
522
+ return __async(this, arguments, function* ({
523
+ cmsId,
524
+ cmsPublicToken,
525
+ tableId,
526
+ useDraft,
527
+ whereLogic
528
+ }) {
487
529
  if (!cmsId || !cmsPublicToken || !tableId) {
488
530
  return 0;
489
531
  }
@@ -512,7 +554,17 @@ function registerAllCmsFunctions(loader) {
512
554
  displayName: "Fetch Plasmic CMS Tables",
513
555
  description: "Fetches table metadata from Plasmic CMS",
514
556
  importPath: "@plasmicpkgs/cms",
515
- params: [cmsIdParam, cmsPublicTokenParam]
557
+ params: [
558
+ {
559
+ type: "object",
560
+ display: "flatten",
561
+ name: "Opts",
562
+ fields: {
563
+ cmsId: cmsIdParam,
564
+ cmsPublicToken: cmsPublicTokenParam
565
+ }
566
+ }
567
+ ]
516
568
  });
517
569
  _registerFunction(fetchContent, {
518
570
  name: "fetchContent",
@@ -521,17 +573,24 @@ function registerAllCmsFunctions(loader) {
521
573
  description: "Fetch content from a Plasmic CMS table",
522
574
  importPath: "@plasmicpkgs/cms",
523
575
  params: [
524
- cmsIdParam,
525
- cmsPublicTokenParam,
526
- tableIdParam,
527
- selectParam,
528
- whereLogicParam,
529
- orderByParam,
530
- orderDirectionParam,
531
- limitParam,
532
- offsetParam,
533
- useDraftParam,
534
- localeParam
576
+ {
577
+ type: "object",
578
+ display: "flatten",
579
+ name: "Opts",
580
+ fields: {
581
+ cmsId: cmsIdParam,
582
+ cmsPublicToken: cmsPublicTokenParam,
583
+ tableId: tableIdParam,
584
+ select: selectParam,
585
+ whereLogic: whereLogicParam,
586
+ orderBy: orderByParam,
587
+ orderDirection: orderDirectionParam,
588
+ limit: limitParam,
589
+ offset: offsetParam,
590
+ useDraft: useDraftParam,
591
+ locale: localeParam
592
+ }
593
+ }
535
594
  ],
536
595
  fnContext: sharedTableFnContext
537
596
  });
@@ -542,11 +601,18 @@ function registerAllCmsFunctions(loader) {
542
601
  description: "Fetch the count of entries from a Plasmic CMS table",
543
602
  importPath: "@plasmicpkgs/cms",
544
603
  params: [
545
- cmsIdParam,
546
- cmsPublicTokenParam,
547
- tableIdParam,
548
- whereLogicParam,
549
- useDraftParam
604
+ {
605
+ type: "object",
606
+ display: "flatten",
607
+ name: "Opts",
608
+ fields: {
609
+ cmsId: cmsIdParam,
610
+ cmsPublicToken: cmsPublicTokenParam,
611
+ tableId: tableIdParam,
612
+ whereLogic: whereLogicParam,
613
+ useDraft: useDraftParam
614
+ }
615
+ }
550
616
  ],
551
617
  fnContext: sharedTableFnContext
552
618
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/index.ts", "../src/api.ts", "../src/constants.ts", "../src/util.ts", "../src/schema.ts", "../src/where.ts"],
4
- "sourcesContent": ["import registerFunction, {\n CustomFunctionMeta,\n} from \"@plasmicapp/host/registerFunction\";\nimport type { RulesLogic } from \"json-logic-js\";\nimport { mkApi } from \"./api\";\nimport { DEFAULT_HOST } from \"./constants\";\nimport { ApiCmsTable } from \"./schema\";\nimport { mkFieldOptions } from \"./util\";\nimport { cmsTableToQueryBuilderConfig, rulesLogicToCmsWhere } from \"./where\";\n\nfunction getCmsHost() {\n return (globalThis as any)[\"__PLASMIC_CMS_HOST__\"] ?? DEFAULT_HOST;\n}\n\ninterface FnContext {\n tables: ApiCmsTable[];\n}\n\nfunction sharedTableFnContext(\n cmsId?: string,\n cmsPublicToken?: string,\n ..._args: unknown[]\n): {\n dataKey: string;\n fetcher: () => Promise<FnContext>;\n} {\n if (!cmsId || !cmsPublicToken) {\n return {\n dataKey: \"\",\n fetcher: async () => ({ tables: [] }),\n };\n }\n return {\n dataKey: `cms_tables/${JSON.stringify({\n cmsId,\n cmsPublicToken,\n })}`,\n fetcher: async () => {\n const api = mkApi({\n databaseId: cmsId,\n databaseToken: cmsPublicToken,\n host: getCmsHost(),\n });\n const tables = await api.fetchTables();\n return { tables };\n },\n };\n}\n\n// TODO: Handle markdown in descriptions and link to https://docs.plasmic.app/learn/plasmic-cms-api-reference/#find-your-cms-ids-public-token-and-secret-token\nconst cmsIdParam = {\n name: \"cmsId\",\n type: \"string\",\n description: \"Find the CMS ID on the Plasmic CMS settings page.\",\n} as const;\n\nconst cmsPublicTokenParam = {\n name: \"cmsPublicToken\",\n type: \"string\",\n description: \"Find the Public Token on the Plasmic CMS settings page.\",\n} as const;\n\nconst tableIdParam = {\n name: \"tableId\",\n type: \"choice\",\n options: (_args: unknown, ctx: FnContext) => {\n if (!ctx?.tables) {\n return [];\n }\n return ctx.tables.map((table: { identifier: string; name: string }) => ({\n value: table.identifier,\n label: table.name,\n }));\n },\n} as const;\n\nconst selectParam = {\n name: \"select\",\n type: \"choice\",\n multiSelect: true,\n description: \"Fields to fetch. Defaults to all fields.\",\n defaultValueHint: [\"Default: *\"] as string[],\n options: (args: { 2?: string | undefined }, ctx: FnContext) => {\n const tableId = args[2];\n return mkFieldOptions(ctx.tables, tableId);\n },\n} as const;\n\nconst whereLogicParam = {\n name: \"where\",\n type: \"queryBuilder\",\n description: \"Filter fetched entries. Defaults to fetch all entries.\",\n config: (args: { 2?: string | undefined }, ctx: FnContext) => {\n const tableId = args[2];\n const table = ctx.tables.find((t) => t.identifier === tableId);\n if (table) {\n return cmsTableToQueryBuilderConfig(table);\n } else {\n return { fields: {} };\n }\n },\n} as const;\n\nconst orderByParam = {\n name: \"orderBy\",\n type: \"choice\",\n description: \"Field to order entries by. Defaults to creation order.\",\n options: (args: { 2?: string | undefined }, ctx: FnContext) => {\n const tableId = args[2];\n return mkFieldOptions(ctx.tables, tableId);\n },\n} as const;\n\nconst orderDirectionParam = {\n name: \"orderDirection\",\n label: \"Direction\",\n type: \"choice\",\n options: [\n {\n value: \"asc\",\n label: \"Ascending\",\n },\n {\n value: \"desc\",\n label: \"Descending\",\n },\n ] as { value: \"asc\" | \"desc\"; label: string }[],\n defaultValueHint: \"Default: Ascending\",\n} as const;\n\nconst limitParam = {\n name: \"limit\",\n type: \"number\",\n description: \"Maximum number of entries to fetch.\",\n} as const;\n\nconst offsetParam = {\n name: \"offset\",\n type: \"number\",\n description: \"Number of entries to skip.\",\n defaultValueHint: 0,\n} as const;\n\nconst useDraftParam = {\n name: \"useDraft\",\n type: \"boolean\",\n description: \"Whether to use draft data.\",\n defaultValueHint: false,\n} as const;\n\nconst localeParam = {\n name: \"locale\",\n type: \"string\",\n description: \"The locale to use. Defaults to base locale.\",\n} as const;\n\nexport async function fetchTables(cmsId: string, cmsPublicToken: string) {\n const api = mkApi({\n databaseId: cmsId,\n databaseToken: cmsPublicToken,\n host: getCmsHost(),\n });\n\n return api.fetchTables();\n}\n\nexport async function fetchContent(\n cmsId?: string,\n cmsPublicToken?: string,\n tableId?: string,\n select?: string[],\n whereLogic?: RulesLogic,\n orderBy?: string,\n orderDirection?: \"asc\" | \"desc\",\n limit?: number,\n offset?: number,\n useDraft?: boolean,\n locale?: string\n) {\n if (!cmsId || !cmsPublicToken || !tableId) {\n return [];\n }\n\n const api = mkApi({\n databaseId: cmsId,\n databaseToken: cmsPublicToken,\n host: getCmsHost(),\n useDraft,\n locale,\n });\n\n return api.query(tableId, {\n fields: select,\n where: rulesLogicToCmsWhere(whereLogic),\n orderBy,\n desc: orderDirection === \"desc\",\n limit,\n offset,\n });\n}\n\nexport async function fetchCount(\n cmsId?: string,\n cmsPublicToken?: string,\n tableId?: string,\n whereLogic?: RulesLogic,\n useDraft?: boolean\n) {\n if (!cmsId || !cmsPublicToken || !tableId) {\n return 0;\n }\n\n const api = mkApi({\n databaseId: cmsId,\n databaseToken: cmsPublicToken,\n host: getCmsHost(),\n useDraft,\n });\n\n return api.count(tableId, {\n where: rulesLogicToCmsWhere(whereLogic),\n });\n}\n\nexport function registerAllCmsFunctions(loader?: { registerFunction: any }) {\n function _registerFunction<T extends (...args: any[]) => any>(\n fn: T,\n meta: CustomFunctionMeta<T>\n ) {\n if (loader) {\n loader.registerFunction(fn, meta);\n } else {\n registerFunction(fn, meta);\n }\n }\n\n _registerFunction(fetchTables, {\n name: \"fetchTables\",\n namespace: \"plasmicCms\",\n displayName: \"Fetch Plasmic CMS Tables\",\n description: \"Fetches table metadata from Plasmic CMS\",\n importPath: \"@plasmicpkgs/cms\",\n params: [cmsIdParam, cmsPublicTokenParam],\n });\n\n _registerFunction(fetchContent, {\n name: \"fetchContent\",\n namespace: \"plasmicCms\",\n displayName: \"Fetch Plasmic CMS Content\",\n description: \"Fetch content from a Plasmic CMS table\",\n importPath: \"@plasmicpkgs/cms\",\n params: [\n cmsIdParam,\n cmsPublicTokenParam,\n tableIdParam,\n selectParam,\n whereLogicParam,\n orderByParam,\n orderDirectionParam,\n limitParam,\n offsetParam,\n useDraftParam,\n localeParam,\n ],\n fnContext: sharedTableFnContext,\n });\n\n _registerFunction(fetchCount, {\n name: \"fetchCount\",\n namespace: \"plasmicCms\",\n displayName: \"Fetch Plasmic CMS Count\",\n description: \"Fetch the count of entries from a Plasmic CMS table\",\n importPath: \"@plasmicpkgs/cms\",\n params: [\n cmsIdParam,\n cmsPublicTokenParam,\n tableIdParam,\n whereLogicParam,\n useDraftParam,\n ],\n fnContext: sharedTableFnContext,\n });\n}\n\n// Export utilities and types with underscore prefix\nexport { API as _API, HttpError as _HttpError, mkApi as _mkApi } from \"./api\";\n\nexport type {\n DatabaseConfig as _DatabaseConfig,\n QueryParams as _QueryParams,\n} from \"./api\";\n\nexport { DEFAULT_HOST as _DEFAULT_HOST } from \"./constants\";\n\nexport { CmsMetaType as _CmsMetaType } from \"./schema\";\nexport type {\n ApiCmsQuery as _ApiCmsQuery,\n ApiCmsRow as _ApiCmsRow,\n ApiCmsTable as _ApiCmsTable,\n} from \"./schema\";\n\nexport type {\n CmsBaseType as _CmsBaseType,\n CmsBoolean as _CmsBoolean,\n CmsDateTime as _CmsDateTime,\n CmsEnum as _CmsEnum,\n CmsFieldMeta as _CmsFieldMeta,\n CmsFile as _CmsFile,\n CmsImage as _CmsImage,\n CmsLongText as _CmsLongText,\n CmsNumber as _CmsNumber,\n CmsRef as _CmsRef,\n CmsRichText as _CmsRichText,\n CmsTableSchema as _CmsTableSchema,\n CmsText as _CmsText,\n CmsTextLike as _CmsTextLike,\n CmsType as _CmsType,\n} from \"./schema\";\n\nexport {\n mkFieldOptions as _mkFieldOptions,\n mkTableOptions as _mkTableOptions,\n} from \"./util\";\n", "import { ApiCmsQuery, ApiCmsRow, ApiCmsTable } from \"./schema\";\n\nexport interface DatabaseConfig {\n host: string;\n databaseId: string;\n databaseToken: string;\n locale?: string;\n useDraft?: boolean | string[];\n}\n\nexport interface QueryParams {\n useDraft?: boolean;\n where?: any;\n orderBy?: string;\n desc?: boolean;\n limit?: number;\n offset?: number;\n fields?: string[];\n}\n\nfunction queryParamsToApi(params: QueryParams): ApiCmsQuery {\n return {\n where: params.where,\n limit: params.limit,\n offset: params.offset,\n order: params.orderBy\n ? [\n {\n field: params.orderBy,\n dir: params.desc ? \"desc\" : \"asc\",\n },\n ]\n : undefined,\n fields: params.fields,\n };\n}\n\nexport class HttpError extends Error {\n constructor(public status: number, message: string) {\n super(message);\n }\n}\n\nexport class API {\n constructor(private config: DatabaseConfig) {}\n\n async get(endpoint: string, params: any = {}) {\n const url = new URL(\n `${this.config.host}/api/v1/cms/databases/${this.config.databaseId}${endpoint}`\n );\n const fixedParams = Object.keys(params).reduce((newObj, key) => {\n const value = params[key];\n if (value != null) {\n newObj[key] = value;\n }\n return newObj;\n }, {} as any);\n url.search = new URLSearchParams(fixedParams).toString();\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: {\n accept: \"*/*\",\n \"x-plasmic-api-cms-tokens\": `${this.config.databaseId}:${this.config.databaseToken}`,\n },\n mode: \"cors\",\n });\n\n if (response.status !== 200) {\n let message = await response.text();\n try {\n const json = JSON.parse(message);\n if (json.error?.message) {\n message = json.error.message;\n }\n } catch {\n // ignored\n }\n throw new HttpError(response.status, message);\n }\n\n return await response.json();\n }\n\n async fetchTables(): Promise<ApiCmsTable[]> {\n try {\n const response = await this.get(``);\n return response.tables;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }\n\n private useDraftForTable(table: string) {\n if (Array.isArray(this.config.useDraft)) {\n return this.config.useDraft.includes(table);\n } else {\n return this.config.useDraft ?? false;\n }\n }\n\n async query(table: string, params: QueryParams = {}): Promise<ApiCmsRow[]> {\n try {\n const response = await this.get(`/tables/${table}/query`, {\n q: JSON.stringify(queryParamsToApi(params)),\n draft: Number(this.useDraftForTable(table) ?? params.useDraft),\n locale: this.config.locale,\n });\n return response.rows;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }\n\n async count(\n table: string,\n params: Pick<QueryParams, \"where\" | \"useDraft\"> = {}\n ): Promise<number> {\n try {\n const response = await this.get(`/tables/${table}/count`, {\n q: JSON.stringify(queryParamsToApi(params)),\n draft: Number(this.useDraftForTable(table) ?? params.useDraft),\n });\n return response.count;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }\n}\n\nexport function mkApi(config: DatabaseConfig | undefined) {\n if (!config) {\n throw new Error(\"Component must be wrapped in 'CMS Data Provider'.\");\n }\n\n return new API(config);\n}\n", "export const DEFAULT_HOST = \"https://data.plasmic.app\";\n", "import { ApiCmsTable, CmsType } from \"./schema\";\n\ntype ValueLabelPair = {\n value: string;\n label: string;\n};\n\nexport function mkTableOptions(\n tables: ApiCmsTable[] | undefined\n): ValueLabelPair[] {\n if (!tables) {\n return [];\n }\n\n return tables.map((table) => ({\n value: table.identifier,\n label: table.name,\n }));\n}\n\nexport function mkFieldOptions(\n tables: ApiCmsTable[] | undefined,\n tableIdentifier: string | undefined,\n types?: CmsType[]\n): ValueLabelPair[] {\n if (!tables) {\n return [];\n }\n\n const table = tables.find((t) => t.identifier === tableIdentifier);\n if (!table) {\n return [];\n }\n\n let fields = table.schema.fields;\n if (types) {\n fields = fields.filter((f) => types.includes(f.type));\n }\n const options = fields.map((f) => ({\n value: f.identifier,\n label: f.label || f.identifier,\n }));\n if (!options.some((option) => option.value === \"_id\")) {\n options.push({\n label: \"System ID\",\n value: \"_id\",\n });\n }\n\n return options;\n}\n", "// This should be kept in sync with wab/ApiSchema.\n\n// eslint-disable-next-line no-shadow\nexport enum CmsMetaType {\n TEXT = \"text\",\n LONG_TEXT = \"long-text\",\n NUMBER = \"number\",\n IMAGE = \"image\",\n FILE = \"file\",\n DATE_TIME = \"date-time\",\n BOOLEAN = \"boolean\",\n COLOR = \"color\",\n RICH_TEXT = \"rich-text\",\n REF = \"ref\",\n LIST = \"list\",\n OBJECT = \"object\",\n ENUM = \"enum\",\n}\n\nexport interface CmsBaseType<T> {\n /** The stable unique identifier, like `heroImage`. */\n identifier: string;\n /** The field label. */\n label?: string;\n helperText: string;\n required: boolean;\n hidden: boolean;\n localized: boolean;\n unique: boolean;\n /** The empty string \"\" locale is the default locale. */\n defaultValueByLocale: { [locale: string]: T };\n}\n\nexport interface CmsTextLike {\n defaultValue?: string;\n minChars?: number;\n maxChars?: number;\n}\n\nexport interface CmsText extends CmsBaseType<string>, CmsTextLike {\n type: CmsMetaType.TEXT;\n}\n\nexport interface CmsLongText extends CmsBaseType<string>, CmsTextLike {\n type: CmsMetaType.LONG_TEXT;\n}\n\nexport interface CmsNumber extends CmsBaseType<number> {\n type: CmsMetaType.NUMBER;\n defaultValue?: number;\n}\n\nexport interface CmsBoolean extends CmsBaseType<boolean> {\n type: CmsMetaType.BOOLEAN;\n defaultValue?: boolean;\n}\n\nexport interface CmsImage extends CmsBaseType<string> {\n type: CmsMetaType.IMAGE;\n defaultValue?: string;\n}\n\nexport interface CmsDateTime extends CmsBaseType<string> {\n type: CmsMetaType.DATE_TIME;\n defaultValue?: string;\n}\n\nexport interface CmsRichText extends CmsBaseType<string> {\n type: CmsMetaType.RICH_TEXT;\n defaultValue?: string;\n}\n\nexport interface CmsFile extends CmsBaseType<string> {\n type: CmsMetaType.FILE;\n defaultValue?: string;\n}\n\nexport interface CmsRef extends CmsBaseType<string> {\n type: CmsMetaType.REF;\n defaultValue?: string;\n}\n\nexport interface CmsList extends CmsBaseType<any[]> {\n type: CmsMetaType.LIST;\n fields: CmsFieldMeta[];\n}\n\nexport interface CmsObject extends CmsBaseType<object> {\n type: CmsMetaType.OBJECT;\n fields: CmsFieldMeta[];\n}\n\nexport interface CmsColor extends CmsBaseType<string> {\n type: CmsMetaType.COLOR;\n defaultValue?: string;\n}\n\nexport interface CmsEnum extends CmsBaseType<string> {\n type: CmsMetaType.ENUM;\n defaultValue?: string;\n options: string[];\n}\n\nexport type CmsFieldMeta =\n | CmsRef\n | CmsList\n | CmsObject\n | CmsText\n | CmsLongText\n | CmsNumber\n | CmsBoolean\n | CmsImage\n | CmsFile\n | CmsDateTime\n | CmsColor\n | CmsRichText\n | CmsEnum;\n\nexport type CmsType = CmsFieldMeta[\"type\"];\n\nexport interface CmsTableSchema {\n fields: CmsFieldMeta[];\n}\n\nexport interface ApiCmsTable {\n identifier: string;\n name: string;\n schema: CmsTableSchema;\n}\n\nexport interface ApiCmsRow {\n identifier: string | null;\n data: Record<string, any> | null;\n}\n\ntype FilterClause = any;\n\nexport interface ApiCmsQuery {\n where?: FilterClause;\n limit?: number;\n offset?: number;\n order?: (string | { field: string; dir: \"asc\" | \"desc\" })[];\n fields?: string[];\n}\n", "import type {\n Config,\n Field,\n FieldOrGroup,\n} from \"@react-awesome-query-builder/core\";\nimport type { RulesLogic } from \"json-logic-js\";\nimport { ApiCmsTable, CmsFieldMeta, CmsMetaType } from \"./schema\";\n\n/**\n * Maps Plasmic CMS table to react-awesome-query-builder config.\n *\n * The result will be handled by {@link rulesLogicToCmsWhere}.\n * Make sure it supports all operators defined here.\n */\nexport function cmsTableToQueryBuilderConfig(\n table: ApiCmsTable\n): Pick<Config, \"fields\"> {\n const qbFields: { [key: string]: FieldOrGroup } = {\n _id: {\n type: \"text\",\n label: \"System ID\",\n operators: [\"equal\", \"not_equal\"],\n },\n };\n for (const field of table.schema.fields) {\n const qbField = cmsFieldToQueryBuilderField(field);\n if (qbField) {\n qbFields[field.identifier] = qbField;\n }\n }\n return {\n fields: qbFields,\n };\n}\n\nfunction cmsFieldToQueryBuilderField(field: CmsFieldMeta): Field | undefined {\n const label = field.label || field.identifier;\n switch (field.type) {\n case CmsMetaType.TEXT:\n case CmsMetaType.LONG_TEXT:\n case CmsMetaType.REF: {\n return {\n type: \"text\",\n label,\n operators: [\"equal\", \"not_equal\", \"regex\"],\n };\n }\n case CmsMetaType.NUMBER: {\n return {\n type: \"number\",\n label,\n operators: [\n \"equal\",\n \"not_equal\",\n \"less\",\n \"less_or_equal\",\n \"greater\",\n \"greater_or_equal\",\n ],\n };\n }\n case CmsMetaType.BOOLEAN: {\n return {\n type: \"boolean\",\n label,\n };\n }\n case CmsMetaType.DATE_TIME: {\n return {\n type: \"datetime\",\n label,\n operators: [\n \"equal\",\n \"not_equal\",\n \"less\",\n \"less_or_equal\",\n \"greater\",\n \"greater_or_equal\",\n ],\n };\n }\n case CmsMetaType.ENUM: {\n return {\n type: \"select\",\n label,\n listValues: field.options,\n operators: [\"select_equals\", \"select_not_equals\", \"select_any_in\"],\n };\n }\n\n // Following types do not support filtering\n case CmsMetaType.COLOR:\n case CmsMetaType.FILE:\n case CmsMetaType.IMAGE:\n case CmsMetaType.LIST:\n case CmsMetaType.OBJECT:\n case CmsMetaType.RICH_TEXT:\n return;\n }\n}\n\n/**\n * Maps JsonLogic to Plasmic CMS API where query.\n *\n * See also:\n * - https://docs.plasmic.app/learn/plasmic-cms-api-reference/#filter-query\n * - makeSqlCondition in cms-util.ts\n */\nexport function rulesLogicToCmsWhere(logic: RulesLogic | undefined): any {\n if (logic === null || logic === undefined) {\n return undefined;\n } else if (typeof logic !== \"object\") {\n throw new Error(`unexpected logic: ${JSON.stringify(logic)}`);\n } else if (\"and\" in logic) {\n return {\n $and: logic[\"and\"].map(rulesLogicToCmsWhere),\n };\n } else if (\"or\" in logic) {\n return {\n $or: logic[\"or\"].map(rulesLogicToCmsWhere),\n };\n } else if (\"!\" in logic) {\n return {\n $not: rulesLogicToCmsWhere(logic[\"!\"]),\n };\n } else if (\"==\" in logic) {\n const [{ var: field }, operand] = logic[\"==\"] as [{ var: string }, unknown];\n return {\n [field]: operand,\n };\n } else if (\"!=\" in logic) {\n const [{ var: field }, operand] = logic[\"!=\"] as [{ var: string }, unknown];\n return {\n $not: { [field]: operand },\n };\n } else {\n // Map JsonLogic to Plasmic CMS where query:\n // JsonLogic: { \"<=\": [{ \"var\": \"age\" }, 18] }\n // CMS where: { \"$lt\": { \"age\": 18 } }\n const [key, value] = Object.entries(logic)[0];\n const apiOp: string | undefined = operatorMapping[key];\n if (apiOp) {\n const [{ var: field }, operand] = value as [{ var: string }, unknown];\n return { [field]: { [apiOp]: operand } };\n }\n\n throw new Error(`unexpected logic: ${JSON.stringify(logic)}`);\n }\n}\n\n/** Maps JsonLogic operator to Plasmic CMS operator. */\nconst operatorMapping: Record<string, string> = {\n \"<\": \"$lt\",\n \"<=\": \"$le\",\n \">\": \"$gt\",\n \">=\": \"$ge\",\n in: \"$in\",\n regex: \"$regex\",\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,sBAEA;;;ACkBP,SAAS,iBAAiB,QAAkC;AAC1D,SAAO;AAAA,IACL,OAAO,OAAO;AAAA,IACd,OAAO,OAAO;AAAA,IACd,QAAQ,OAAO;AAAA,IACf,OAAO,OAAO,UACV;AAAA,MACE;AAAA,QACE,OAAO,OAAO;AAAA,QACd,KAAK,OAAO,OAAO,SAAS;AAAA,MAC9B;AAAA,IACF,IACA;AAAA,IACJ,QAAQ,OAAO;AAAA,EACjB;AACF;AAEO,IAAM,YAAN,cAAwB,MAAM;AAAA,EACnC,YAAmB,QAAgB,SAAiB;AAClD,UAAM,OAAO;AADI;AAAA,EAEnB;AACF;AAEO,IAAM,MAAN,MAAU;AAAA,EACf,YAAoB,QAAwB;AAAxB;AAAA,EAAyB;AAAA,EAEvC,IAAI,IAAoC;AAAA,+CAApC,UAAkB,SAAc,CAAC,GAAG;AA9ChD;AA+CI,YAAM,MAAM,IAAI;AAAA,QACd,GAAG,KAAK,OAAO,6BAA6B,KAAK,OAAO,aAAa;AAAA,MACvE;AACA,YAAM,cAAc,OAAO,KAAK,MAAM,EAAE,OAAO,CAAC,QAAQ,QAAQ;AAC9D,cAAM,QAAQ,OAAO,GAAG;AACxB,YAAI,SAAS,MAAM;AACjB,iBAAO,GAAG,IAAI;AAAA,QAChB;AACA,eAAO;AAAA,MACT,GAAG,CAAC,CAAQ;AACZ,UAAI,SAAS,IAAI,gBAAgB,WAAW,EAAE,SAAS;AACvD,YAAM,WAAW,MAAM,MAAM,IAAI,SAAS,GAAG;AAAA,QAC3C,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,QAAQ;AAAA,UACR,4BAA4B,GAAG,KAAK,OAAO,cAAc,KAAK,OAAO;AAAA,QACvE;AAAA,QACA,MAAM;AAAA,MACR,CAAC;AAED,UAAI,SAAS,WAAW,KAAK;AAC3B,YAAI,UAAU,MAAM,SAAS,KAAK;AAClC,YAAI;AACF,gBAAM,OAAO,KAAK,MAAM,OAAO;AAC/B,eAAI,UAAK,UAAL,mBAAY,SAAS;AACvB,sBAAU,KAAK,MAAM;AAAA,UACvB;AAAA,QACF,SAAQ,GAAN;AAAA,QAEF;AACA,cAAM,IAAI,UAAU,SAAS,QAAQ,OAAO;AAAA,MAC9C;AAEA,aAAO,MAAM,SAAS,KAAK;AAAA,IAC7B;AAAA;AAAA,EAEM,cAAsC;AAAA;AAC1C,UAAI;AACF,cAAM,WAAW,MAAM,KAAK,IAAI,EAAE;AAClC,eAAO,SAAS;AAAA,MAClB,SAAS,GAAP;AACA,gBAAQ,MAAM,CAAC;AACf,cAAM;AAAA,MACR;AAAA,IACF;AAAA;AAAA,EAEQ,iBAAiB,OAAe;AA7F1C;AA8FI,QAAI,MAAM,QAAQ,KAAK,OAAO,QAAQ,GAAG;AACvC,aAAO,KAAK,OAAO,SAAS,SAAS,KAAK;AAAA,IAC5C,OAAO;AACL,cAAO,UAAK,OAAO,aAAZ,YAAwB;AAAA,IACjC;AAAA,EACF;AAAA,EAEM,MAAM,IAA+D;AAAA,+CAA/D,OAAe,SAAsB,CAAC,GAAyB;AArG7E;AAsGI,UAAI;AACF,cAAM,WAAW,MAAM,KAAK,IAAI,WAAW,eAAe;AAAA,UACxD,GAAG,KAAK,UAAU,iBAAiB,MAAM,CAAC;AAAA,UAC1C,OAAO,QAAO,UAAK,iBAAiB,KAAK,MAA3B,YAAgC,OAAO,QAAQ;AAAA,UAC7D,QAAQ,KAAK,OAAO;AAAA,QACtB,CAAC;AACD,eAAO,SAAS;AAAA,MAClB,SAAS,GAAP;AACA,gBAAQ,MAAM,CAAC;AACf,cAAM;AAAA,MACR;AAAA,IACF;AAAA;AAAA,EAEM,MACJ,IAEiB;AAAA,+CAFjB,OACA,SAAkD,CAAC,GAClC;AAtHrB;AAuHI,UAAI;AACF,cAAM,WAAW,MAAM,KAAK,IAAI,WAAW,eAAe;AAAA,UACxD,GAAG,KAAK,UAAU,iBAAiB,MAAM,CAAC;AAAA,UAC1C,OAAO,QAAO,UAAK,iBAAiB,KAAK,MAA3B,YAAgC,OAAO,QAAQ;AAAA,QAC/D,CAAC;AACD,eAAO,SAAS;AAAA,MAClB,SAAS,GAAP;AACA,gBAAQ,MAAM,CAAC;AACf,cAAM;AAAA,MACR;AAAA,IACF;AAAA;AACF;AAEO,SAAS,MAAM,QAAoC;AACxD,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AAEA,SAAO,IAAI,IAAI,MAAM;AACvB;;;AC1IO,IAAM,eAAe;;;ACOrB,SAAS,eACd,QACkB;AAClB,MAAI,CAAC,QAAQ;AACX,WAAO,CAAC;AAAA,EACV;AAEA,SAAO,OAAO,IAAI,CAAC,WAAW;AAAA,IAC5B,OAAO,MAAM;AAAA,IACb,OAAO,MAAM;AAAA,EACf,EAAE;AACJ;AAEO,SAAS,eACd,QACA,iBACA,OACkB;AAClB,MAAI,CAAC,QAAQ;AACX,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,QAAQ,OAAO,KAAK,CAAC,MAAM,EAAE,eAAe,eAAe;AACjE,MAAI,CAAC,OAAO;AACV,WAAO,CAAC;AAAA,EACV;AAEA,MAAI,SAAS,MAAM,OAAO;AAC1B,MAAI,OAAO;AACT,aAAS,OAAO,OAAO,CAAC,MAAM,MAAM,SAAS,EAAE,IAAI,CAAC;AAAA,EACtD;AACA,QAAM,UAAU,OAAO,IAAI,CAAC,OAAO;AAAA,IACjC,OAAO,EAAE;AAAA,IACT,OAAO,EAAE,SAAS,EAAE;AAAA,EACtB,EAAE;AACF,MAAI,CAAC,QAAQ,KAAK,CAAC,WAAW,OAAO,UAAU,KAAK,GAAG;AACrD,YAAQ,KAAK;AAAA,MACX,OAAO;AAAA,MACP,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,SAAO;AACT;;;AC/CO,IAAK,cAAL,kBAAKA,iBAAL;AACL,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,eAAY;AACZ,EAAAA,aAAA,YAAS;AACT,EAAAA,aAAA,WAAQ;AACR,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,eAAY;AACZ,EAAAA,aAAA,aAAU;AACV,EAAAA,aAAA,WAAQ;AACR,EAAAA,aAAA,eAAY;AACZ,EAAAA,aAAA,SAAM;AACN,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,YAAS;AACT,EAAAA,aAAA,UAAO;AAbG,SAAAA;AAAA,GAAA;;;ACWL,SAAS,6BACd,OACwB;AACxB,QAAM,WAA4C;AAAA,IAChD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW,CAAC,SAAS,WAAW;AAAA,IAClC;AAAA,EACF;AACA,aAAW,SAAS,MAAM,OAAO,QAAQ;AACvC,UAAM,UAAU,4BAA4B,KAAK;AACjD,QAAI,SAAS;AACX,eAAS,MAAM,UAAU,IAAI;AAAA,IAC/B;AAAA,EACF;AACA,SAAO;AAAA,IACL,QAAQ;AAAA,EACV;AACF;AAEA,SAAS,4BAA4B,OAAwC;AAC3E,QAAM,QAAQ,MAAM,SAAS,MAAM;AACnC,UAAQ,MAAM,MAAM;AAAA,IAClB;AAAA,IACA;AAAA,IACA,sBAAsB;AACpB,aAAO;AAAA,QACL,MAAM;AAAA,QACN;AAAA,QACA,WAAW,CAAC,SAAS,aAAa,OAAO;AAAA,MAC3C;AAAA,IACF;AAAA,IACA,4BAAyB;AACvB,aAAO;AAAA,QACL,MAAM;AAAA,QACN;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,8BAA0B;AACxB,aAAO;AAAA,QACL,MAAM;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA,kCAA4B;AAC1B,aAAO;AAAA,QACL,MAAM;AAAA,QACN;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,wBAAuB;AACrB,aAAO;AAAA,QACL,MAAM;AAAA,QACN;AAAA,QACA,YAAY,MAAM;AAAA,QAClB,WAAW,CAAC,iBAAiB,qBAAqB,eAAe;AAAA,MACnE;AAAA,IACF;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AACE;AAAA,EACJ;AACF;AASO,SAAS,qBAAqB,OAAoC;AACvE,MAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,WAAO;AAAA,EACT,WAAW,OAAO,UAAU,UAAU;AACpC,UAAM,IAAI,MAAM,qBAAqB,KAAK,UAAU,KAAK,GAAG;AAAA,EAC9D,WAAW,SAAS,OAAO;AACzB,WAAO;AAAA,MACL,MAAM,MAAM,KAAK,EAAE,IAAI,oBAAoB;AAAA,IAC7C;AAAA,EACF,WAAW,QAAQ,OAAO;AACxB,WAAO;AAAA,MACL,KAAK,MAAM,IAAI,EAAE,IAAI,oBAAoB;AAAA,IAC3C;AAAA,EACF,WAAW,OAAO,OAAO;AACvB,WAAO;AAAA,MACL,MAAM,qBAAqB,MAAM,GAAG,CAAC;AAAA,IACvC;AAAA,EACF,WAAW,QAAQ,OAAO;AACxB,UAAM,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,IAAI,MAAM,IAAI;AAC5C,WAAO;AAAA,MACL,CAAC,KAAK,GAAG;AAAA,IACX;AAAA,EACF,WAAW,QAAQ,OAAO;AACxB,UAAM,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,IAAI,MAAM,IAAI;AAC5C,WAAO;AAAA,MACL,MAAM,EAAE,CAAC,KAAK,GAAG,QAAQ;AAAA,IAC3B;AAAA,EACF,OAAO;AAIL,UAAM,CAAC,KAAK,KAAK,IAAI,OAAO,QAAQ,KAAK,EAAE,CAAC;AAC5C,UAAM,QAA4B,gBAAgB,GAAG;AACrD,QAAI,OAAO;AACT,YAAM,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,IAAI;AAClC,aAAO,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,GAAG,QAAQ,EAAE;AAAA,IACzC;AAEA,UAAM,IAAI,MAAM,qBAAqB,KAAK,UAAU,KAAK,GAAG;AAAA,EAC9D;AACF;AAGA,IAAM,kBAA0C;AAAA,EAC9C,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,OAAO;AACT;;;ALpJA,SAAS,aAAa;AAVtB;AAWE,UAAQ,gBAAmB,sBAAsB,MAAzC,YAA8C;AACxD;AAMA,SAAS,qBACP,OACA,mBACG,OAIH;AACA,MAAI,CAAC,SAAS,CAAC,gBAAgB;AAC7B,WAAO;AAAA,MACL,SAAS;AAAA,MACT,SAAS,MAAS;AAAI,iBAAE,QAAQ,CAAC,EAAE;AAAA;AAAA,IACrC;AAAA,EACF;AACA,SAAO;AAAA,IACL,SAAS,cAAc,KAAK,UAAU;AAAA,MACpC;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,SAAS,MAAY;AACnB,YAAM,MAAM,MAAM;AAAA,QAChB,YAAY;AAAA,QACZ,eAAe;AAAA,QACf,MAAM,WAAW;AAAA,MACnB,CAAC;AACD,YAAM,SAAS,MAAM,IAAI,YAAY;AACrC,aAAO,EAAE,OAAO;AAAA,IAClB;AAAA,EACF;AACF;AAGA,IAAM,aAAa;AAAA,EACjB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AACf;AAEA,IAAM,sBAAsB;AAAA,EAC1B,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AACf;AAEA,IAAM,eAAe;AAAA,EACnB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS,CAAC,OAAgB,QAAmB;AAC3C,QAAI,EAAC,2BAAK,SAAQ;AAChB,aAAO,CAAC;AAAA,IACV;AACA,WAAO,IAAI,OAAO,IAAI,CAAC,WAAiD;AAAA,MACtE,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,IACf,EAAE;AAAA,EACJ;AACF;AAEA,IAAM,cAAc;AAAA,EAClB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,EACb,kBAAkB,CAAC,YAAY;AAAA,EAC/B,SAAS,CAAC,MAAkC,QAAmB;AAC7D,UAAM,UAAU,KAAK,CAAC;AACtB,WAAO,eAAe,IAAI,QAAQ,OAAO;AAAA,EAC3C;AACF;AAEA,IAAM,kBAAkB;AAAA,EACtB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ,CAAC,MAAkC,QAAmB;AAC5D,UAAM,UAAU,KAAK,CAAC;AACtB,UAAM,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,EAAE,eAAe,OAAO;AAC7D,QAAI,OAAO;AACT,aAAO,6BAA6B,KAAK;AAAA,IAC3C,OAAO;AACL,aAAO,EAAE,QAAQ,CAAC,EAAE;AAAA,IACtB;AAAA,EACF;AACF;AAEA,IAAM,eAAe;AAAA,EACnB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS,CAAC,MAAkC,QAAmB;AAC7D,UAAM,UAAU,KAAK,CAAC;AACtB,WAAO,eAAe,IAAI,QAAQ,OAAO;AAAA,EAC3C;AACF;AAEA,IAAM,sBAAsB;AAAA,EAC1B,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,SAAS;AAAA,IACP;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,kBAAkB;AACpB;AAEA,IAAM,aAAa;AAAA,EACjB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AACf;AAEA,IAAM,cAAc;AAAA,EAClB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EACb,kBAAkB;AACpB;AAEA,IAAM,gBAAgB;AAAA,EACpB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EACb,kBAAkB;AACpB;AAEA,IAAM,cAAc;AAAA,EAClB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AACf;AAEA,SAAsB,YAAY,OAAe,gBAAwB;AAAA;AACvE,UAAM,MAAM,MAAM;AAAA,MAChB,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,MAAM,WAAW;AAAA,IACnB,CAAC;AAED,WAAO,IAAI,YAAY;AAAA,EACzB;AAAA;AAEA,SAAsB,aACpB,OACA,gBACA,SACA,QACA,YACA,SACA,gBACA,OACA,QACA,UACA,QACA;AAAA;AACA,QAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,SAAS;AACzC,aAAO,CAAC;AAAA,IACV;AAEA,UAAM,MAAM,MAAM;AAAA,MAChB,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,MAAM,WAAW;AAAA,MACjB;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO,IAAI,MAAM,SAAS;AAAA,MACxB,QAAQ;AAAA,MACR,OAAO,qBAAqB,UAAU;AAAA,MACtC;AAAA,MACA,MAAM,mBAAmB;AAAA,MACzB;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAEA,SAAsB,WACpB,OACA,gBACA,SACA,YACA,UACA;AAAA;AACA,QAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,SAAS;AACzC,aAAO;AAAA,IACT;AAEA,UAAM,MAAM,MAAM;AAAA,MAChB,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,MAAM,WAAW;AAAA,MACjB;AAAA,IACF,CAAC;AAED,WAAO,IAAI,MAAM,SAAS;AAAA,MACxB,OAAO,qBAAqB,UAAU;AAAA,IACxC,CAAC;AAAA,EACH;AAAA;AAEO,SAAS,wBAAwB,QAAoC;AAC1E,WAAS,kBACP,IACA,MACA;AACA,QAAI,QAAQ;AACV,aAAO,iBAAiB,IAAI,IAAI;AAAA,IAClC,OAAO;AACL,uBAAiB,IAAI,IAAI;AAAA,IAC3B;AAAA,EACF;AAEA,oBAAkB,aAAa;AAAA,IAC7B,MAAM;AAAA,IACN,WAAW;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,QAAQ,CAAC,YAAY,mBAAmB;AAAA,EAC1C,CAAC;AAED,oBAAkB,cAAc;AAAA,IAC9B,MAAM;AAAA,IACN,WAAW;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,QAAQ;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAW;AAAA,EACb,CAAC;AAED,oBAAkB,YAAY;AAAA,IAC5B,MAAM;AAAA,IACN,WAAW;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,QAAQ;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAW;AAAA,EACb,CAAC;AACH;",
3
+ "sources": ["../src/index.ts", "../src/api.ts", "../src/constants.ts", "../src/schema.ts", "../src/util.ts", "../src/where.ts"],
4
+ "sourcesContent": ["import registerFunction, {\n CustomFunctionMeta,\n} from \"@plasmicapp/host/registerFunction\";\nimport type { RulesLogic } from \"json-logic-js\";\nimport { mkApi } from \"./api\";\nimport { DEFAULT_HOST } from \"./constants\";\nimport { ApiCmsTable } from \"./schema\";\nimport { mkFieldOptions } from \"./util\";\nimport { cmsTableToQueryBuilderConfig, rulesLogicToCmsWhere } from \"./where\";\n\nfunction getCmsHost() {\n return (globalThis as any)[\"__PLASMIC_CMS_HOST__\"] ?? DEFAULT_HOST;\n}\n\ninterface FnContext {\n tables: ApiCmsTable[];\n}\n\ninterface BaseCMSOpts {\n cmsId?: string;\n cmsPublicToken?: string;\n}\n\ninterface CMSTableOpts extends BaseCMSOpts {\n tableId?: string;\n}\n\nfunction sharedTableFnContext({ cmsId, cmsPublicToken }: BaseCMSOpts = {}): {\n dataKey: string;\n fetcher: () => Promise<FnContext>;\n} {\n if (!cmsId || !cmsPublicToken) {\n return {\n dataKey: \"\",\n fetcher: async () => ({ tables: [] }),\n };\n }\n return {\n dataKey: `cms_tables/${JSON.stringify({\n cmsId,\n cmsPublicToken,\n })}`,\n fetcher: async () => {\n const api = mkApi({\n databaseId: cmsId,\n databaseToken: cmsPublicToken,\n host: getCmsHost(),\n });\n const tables = await api.fetchTables();\n return { tables };\n },\n };\n}\n\nconst cmsIdParam = {\n type: \"string\",\n description: \"ID of the CMS.\",\n helpText:\n \"Find the CMS ID on the [Plasmic CMS settings page](https://docs.plasmic.app/learn/plasmic-cms-api-reference/#find-your-cms-ids-public-token-and-secret-token)\",\n} as const;\n\nconst cmsPublicTokenParam = {\n type: \"string\",\n description: \"Public token of the CMS.\",\n helpText:\n \"Find the public token on the [Plasmic CMS settings page](https://docs.plasmic.app/learn/plasmic-cms-api-reference/#find-your-cms-ids-public-token-and-secret-token)\",\n} as const;\n\nconst tableIdParam = {\n type: \"choice\",\n options: (_args: unknown, ctx: FnContext) => {\n if (!ctx?.tables) {\n return [];\n }\n return ctx.tables.map((table: { identifier: string; name: string }) => ({\n value: table.identifier,\n label: table.name,\n }));\n },\n} as const;\n\nconst selectParam = {\n type: \"choice\",\n multiSelect: true,\n description: \"Fields to fetch. Defaults to all fields.\",\n defaultValueHint: [\"Default: *\"] as string[],\n options: ([opts]: [(CMSTableOpts | undefined)?], ctx: FnContext) => {\n const tableId = opts?.tableId;\n return mkFieldOptions(ctx.tables, tableId, undefined, {\n includeRefStars: true,\n });\n },\n} as const;\n\nconst whereLogicParam = {\n type: \"queryBuilder\",\n description: \"Filter fetched entries. Defaults to fetch all entries.\",\n config: ([opts]: [(CMSTableOpts | undefined)?], ctx: FnContext) => {\n const tableId = opts?.tableId;\n const table = ctx.tables.find((t) => t.identifier === tableId);\n if (table) {\n return cmsTableToQueryBuilderConfig(table);\n } else {\n return { fields: {} };\n }\n },\n} as const;\n\nconst orderByParam = {\n type: \"choice\",\n description: \"Field to order entries by. Defaults to creation order.\",\n options: ([opts]: [(CMSTableOpts | undefined)?], ctx: FnContext) => {\n const tableId = opts?.tableId;\n return mkFieldOptions(ctx.tables, tableId, undefined, {\n includeRefStars: true,\n });\n },\n} as const;\n\nconst orderDirectionParam = {\n label: \"Direction\",\n type: \"choice\",\n options: [\n {\n value: \"asc\",\n label: \"Ascending\",\n },\n {\n value: \"desc\",\n label: \"Descending\",\n },\n ] as { value: \"asc\" | \"desc\"; label: string }[],\n defaultValueHint: \"Default: Ascending\",\n} as const;\n\nconst limitParam = {\n type: \"number\",\n description: \"Maximum number of entries to fetch.\",\n} as const;\n\nconst offsetParam = {\n type: \"number\",\n description: \"Number of entries to skip.\",\n defaultValueHint: 0,\n} as const;\n\nconst useDraftParam = {\n type: \"boolean\",\n description: \"Whether to use draft data.\",\n defaultValueHint: false,\n} as const;\n\nconst localeParam = {\n type: \"string\",\n description: \"The locale to use. Defaults to base locale.\",\n} as const;\n\nexport async function fetchTables({ cmsId, cmsPublicToken }: BaseCMSOpts) {\n if (!cmsId || !cmsPublicToken) {\n return [];\n }\n\n const api = mkApi({\n databaseId: cmsId,\n databaseToken: cmsPublicToken,\n host: getCmsHost(),\n });\n\n return api.fetchTables();\n}\n\ninterface FetchContentOpts extends CMSTableOpts {\n select?: string[];\n whereLogic?: RulesLogic;\n orderBy?: string;\n orderDirection?: \"asc\" | \"desc\";\n limit?: number;\n offset?: number;\n useDraft?: boolean;\n locale?: string;\n}\n\nexport async function fetchContent({\n cmsId,\n cmsPublicToken,\n tableId,\n select,\n whereLogic,\n orderBy,\n orderDirection,\n limit,\n offset,\n useDraft,\n locale,\n}: FetchContentOpts) {\n if (!cmsId || !cmsPublicToken || !tableId) {\n return [];\n }\n\n const api = mkApi({\n databaseId: cmsId,\n databaseToken: cmsPublicToken,\n host: getCmsHost(),\n useDraft,\n locale,\n });\n\n return api.query(tableId, {\n fields: select,\n where: rulesLogicToCmsWhere(whereLogic),\n orderBy,\n desc: orderDirection === \"desc\",\n limit,\n offset,\n });\n}\n\ninterface FetchCountOpts extends CMSTableOpts {\n whereLogic?: RulesLogic;\n useDraft?: boolean;\n}\n\nexport async function fetchCount({\n cmsId,\n cmsPublicToken,\n tableId,\n useDraft,\n whereLogic,\n}: FetchCountOpts) {\n if (!cmsId || !cmsPublicToken || !tableId) {\n return 0;\n }\n\n const api = mkApi({\n databaseId: cmsId,\n databaseToken: cmsPublicToken,\n host: getCmsHost(),\n useDraft,\n });\n\n return api.count(tableId, {\n where: rulesLogicToCmsWhere(whereLogic),\n });\n}\n\nexport function registerAllCmsFunctions(loader?: { registerFunction: any }) {\n function _registerFunction<T extends (...args: any[]) => any>(\n fn: T,\n meta: CustomFunctionMeta<T>\n ) {\n if (loader) {\n loader.registerFunction(fn, meta);\n } else {\n registerFunction(fn, meta);\n }\n }\n\n _registerFunction(fetchTables, {\n name: \"fetchTables\",\n namespace: \"plasmicCms\",\n displayName: \"Fetch Plasmic CMS Tables\",\n description: \"Fetches table metadata from Plasmic CMS\",\n importPath: \"@plasmicpkgs/cms\",\n params: [\n {\n type: \"object\",\n display: \"flatten\",\n name: \"Opts\",\n fields: {\n cmsId: cmsIdParam,\n cmsPublicToken: cmsPublicTokenParam,\n },\n },\n ],\n });\n\n _registerFunction(fetchContent, {\n name: \"fetchContent\",\n namespace: \"plasmicCms\",\n displayName: \"Fetch Plasmic CMS Content\",\n description: \"Fetch content from a Plasmic CMS table\",\n importPath: \"@plasmicpkgs/cms\",\n params: [\n {\n type: \"object\",\n display: \"flatten\",\n name: \"Opts\",\n fields: {\n cmsId: cmsIdParam,\n cmsPublicToken: cmsPublicTokenParam,\n tableId: tableIdParam,\n select: selectParam,\n whereLogic: whereLogicParam,\n orderBy: orderByParam,\n orderDirection: orderDirectionParam,\n limit: limitParam,\n offset: offsetParam,\n useDraft: useDraftParam,\n locale: localeParam,\n },\n },\n ],\n fnContext: sharedTableFnContext,\n });\n\n _registerFunction(fetchCount, {\n name: \"fetchCount\",\n namespace: \"plasmicCms\",\n displayName: \"Fetch Plasmic CMS Count\",\n description: \"Fetch the count of entries from a Plasmic CMS table\",\n importPath: \"@plasmicpkgs/cms\",\n params: [\n {\n type: \"object\",\n display: \"flatten\",\n name: \"Opts\",\n fields: {\n cmsId: cmsIdParam,\n cmsPublicToken: cmsPublicTokenParam,\n tableId: tableIdParam,\n whereLogic: whereLogicParam,\n useDraft: useDraftParam,\n },\n },\n ],\n fnContext: sharedTableFnContext,\n });\n}\n\n// Export utilities and types with underscore prefix\nexport { API as _API, HttpError as _HttpError, mkApi as _mkApi } from \"./api\";\n\nexport type {\n DatabaseConfig as _DatabaseConfig,\n QueryParams as _QueryParams,\n} from \"./api\";\n\nexport { DEFAULT_HOST as _DEFAULT_HOST } from \"./constants\";\n\nexport { CmsMetaType as _CmsMetaType } from \"./schema\";\nexport type {\n ApiCmsQuery as _ApiCmsQuery,\n ApiCmsRow as _ApiCmsRow,\n ApiCmsTable as _ApiCmsTable,\n} from \"./schema\";\n\nexport type {\n CmsBaseType as _CmsBaseType,\n CmsBoolean as _CmsBoolean,\n CmsDateTime as _CmsDateTime,\n CmsEnum as _CmsEnum,\n CmsFieldMeta as _CmsFieldMeta,\n CmsFile as _CmsFile,\n CmsImage as _CmsImage,\n CmsLongText as _CmsLongText,\n CmsNumber as _CmsNumber,\n CmsRef as _CmsRef,\n CmsRichText as _CmsRichText,\n CmsTableSchema as _CmsTableSchema,\n CmsText as _CmsText,\n CmsTextLike as _CmsTextLike,\n CmsType as _CmsType,\n} from \"./schema\";\n\nexport {\n mkFieldOptions as _mkFieldOptions,\n mkTableOptions as _mkTableOptions,\n} from \"./util\";\n", "import { ApiCmsQuery, ApiCmsRow, ApiCmsTable } from \"./schema\";\n\nexport interface DatabaseConfig {\n host: string;\n databaseId: string;\n databaseToken: string;\n locale?: string;\n useDraft?: boolean | string[];\n}\n\nexport interface QueryParams {\n useDraft?: boolean;\n where?: any;\n orderBy?: string;\n desc?: boolean;\n limit?: number;\n offset?: number;\n fields?: string[];\n}\n\nfunction queryParamsToApi(params: QueryParams): ApiCmsQuery {\n return {\n where: params.where,\n limit: params.limit,\n offset: params.offset,\n order: params.orderBy\n ? [\n {\n field: params.orderBy,\n dir: params.desc ? \"desc\" : \"asc\",\n },\n ]\n : undefined,\n fields: params.fields,\n };\n}\n\nexport class HttpError extends Error {\n constructor(public status: number, message: string) {\n super(message);\n }\n}\n\nexport class API {\n constructor(private config: DatabaseConfig) {}\n\n async get(endpoint: string, params: any = {}) {\n const url = new URL(\n `${this.config.host}/api/v1/cms/databases/${this.config.databaseId}${endpoint}`\n );\n const fixedParams = Object.keys(params).reduce((newObj, key) => {\n const value = params[key];\n if (value != null) {\n newObj[key] = value;\n }\n return newObj;\n }, {} as any);\n url.search = new URLSearchParams(fixedParams).toString();\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: {\n accept: \"*/*\",\n \"x-plasmic-api-cms-tokens\": `${this.config.databaseId}:${this.config.databaseToken}`,\n },\n mode: \"cors\",\n });\n\n if (response.status !== 200) {\n let message = await response.text();\n try {\n const json = JSON.parse(message);\n if (json.error?.message) {\n message = json.error.message;\n }\n } catch {\n // ignored\n }\n throw new HttpError(response.status, message);\n }\n\n return await response.json();\n }\n\n async fetchTables(): Promise<ApiCmsTable[]> {\n try {\n const response = await this.get(``);\n return response.tables;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }\n\n private useDraftForTable(table: string) {\n if (Array.isArray(this.config.useDraft)) {\n return this.config.useDraft.includes(table);\n } else {\n return this.config.useDraft ?? false;\n }\n }\n\n async query(table: string, params: QueryParams = {}): Promise<ApiCmsRow[]> {\n try {\n const response = await this.get(`/tables/${table}/query`, {\n q: JSON.stringify(queryParamsToApi(params)),\n draft: Number(this.useDraftForTable(table) ?? params.useDraft),\n locale: this.config.locale,\n });\n return response.rows;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }\n\n async count(\n table: string,\n params: Pick<QueryParams, \"where\" | \"useDraft\"> = {}\n ): Promise<number> {\n try {\n const response = await this.get(`/tables/${table}/count`, {\n q: JSON.stringify(queryParamsToApi(params)),\n draft: Number(this.useDraftForTable(table) ?? params.useDraft),\n });\n return response.count;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }\n}\n\nexport function mkApi(config: DatabaseConfig | undefined) {\n if (!config) {\n throw new Error(\"Component must be wrapped in 'CMS Data Provider'.\");\n }\n\n return new API(config);\n}\n", "export const DEFAULT_HOST = \"https://data.plasmic.app\";\n", "// This should be kept in sync with wab/ApiSchema.\n\n// eslint-disable-next-line no-shadow\nexport enum CmsMetaType {\n TEXT = \"text\",\n LONG_TEXT = \"long-text\",\n NUMBER = \"number\",\n IMAGE = \"image\",\n FILE = \"file\",\n DATE_TIME = \"date-time\",\n BOOLEAN = \"boolean\",\n COLOR = \"color\",\n RICH_TEXT = \"rich-text\",\n REF = \"ref\",\n LIST = \"list\",\n OBJECT = \"object\",\n ENUM = \"enum\",\n}\n\nexport interface CmsBaseType<T> {\n /** The stable unique identifier, like `heroImage`. */\n identifier: string;\n /** The field label. */\n label?: string;\n helperText: string;\n required: boolean;\n hidden: boolean;\n localized: boolean;\n unique: boolean;\n /** The empty string \"\" locale is the default locale. */\n defaultValueByLocale: { [locale: string]: T };\n}\n\nexport interface CmsTextLike {\n defaultValue?: string;\n minChars?: number;\n maxChars?: number;\n}\n\nexport interface CmsText extends CmsBaseType<string>, CmsTextLike {\n type: CmsMetaType.TEXT;\n}\n\nexport interface CmsLongText extends CmsBaseType<string>, CmsTextLike {\n type: CmsMetaType.LONG_TEXT;\n}\n\nexport interface CmsNumber extends CmsBaseType<number> {\n type: CmsMetaType.NUMBER;\n defaultValue?: number;\n}\n\nexport interface CmsBoolean extends CmsBaseType<boolean> {\n type: CmsMetaType.BOOLEAN;\n defaultValue?: boolean;\n}\n\nexport interface CmsImage extends CmsBaseType<string> {\n type: CmsMetaType.IMAGE;\n defaultValue?: string;\n}\n\nexport interface CmsDateTime extends CmsBaseType<string> {\n type: CmsMetaType.DATE_TIME;\n defaultValue?: string;\n}\n\nexport interface CmsRichText extends CmsBaseType<string> {\n type: CmsMetaType.RICH_TEXT;\n defaultValue?: string;\n}\n\nexport interface CmsFile extends CmsBaseType<string> {\n type: CmsMetaType.FILE;\n defaultValue?: string;\n}\n\nexport interface CmsRef extends CmsBaseType<string> {\n type: CmsMetaType.REF;\n defaultValue?: string;\n}\n\nexport interface CmsList extends CmsBaseType<any[]> {\n type: CmsMetaType.LIST;\n fields: CmsFieldMeta[];\n}\n\nexport interface CmsObject extends CmsBaseType<object> {\n type: CmsMetaType.OBJECT;\n fields: CmsFieldMeta[];\n}\n\nexport interface CmsColor extends CmsBaseType<string> {\n type: CmsMetaType.COLOR;\n defaultValue?: string;\n}\n\nexport interface CmsEnum extends CmsBaseType<string> {\n type: CmsMetaType.ENUM;\n defaultValue?: string;\n options: string[];\n}\n\nexport type CmsFieldMeta =\n | CmsRef\n | CmsList\n | CmsObject\n | CmsText\n | CmsLongText\n | CmsNumber\n | CmsBoolean\n | CmsImage\n | CmsFile\n | CmsDateTime\n | CmsColor\n | CmsRichText\n | CmsEnum;\n\nexport type CmsType = CmsFieldMeta[\"type\"];\n\nexport interface CmsTableSchema {\n fields: CmsFieldMeta[];\n}\n\nexport interface ApiCmsTable {\n identifier: string;\n name: string;\n schema: CmsTableSchema;\n}\n\nexport interface ApiCmsRow {\n identifier: string | null;\n data: Record<string, any> | null;\n}\n\ntype FilterClause = any;\n\nexport interface ApiCmsQuery {\n where?: FilterClause;\n limit?: number;\n offset?: number;\n order?: (string | { field: string; dir: \"asc\" | \"desc\" })[];\n fields?: string[];\n}\n", "import {\n ApiCmsTable,\n CmsFieldMeta,\n CmsList,\n CmsMetaType,\n CmsObject,\n CmsType,\n} from \"./schema\";\n\ntype ValueLabelPair = {\n value: string;\n label: string;\n};\n\nexport function mkTableOptions(\n tables: ApiCmsTable[] | undefined\n): ValueLabelPair[] {\n if (!tables) {\n return [];\n }\n\n return tables.map((table) => ({\n value: table.identifier,\n label: table.name,\n }));\n}\n\nexport function mkFieldOptions(\n tables: ApiCmsTable[] | undefined,\n tableIdentifier: string | undefined,\n types?: CmsType[],\n opts?: {\n includeSystemId?: boolean;\n includeRefStars?: boolean;\n }\n): ValueLabelPair[] {\n if (!tables) {\n return [];\n }\n\n const table = tables.find((t) => t.identifier === tableIdentifier);\n if (!table) {\n return [];\n }\n\n let fields = table.schema.fields;\n if (types) {\n fields = fields.filter((f) => types.includes(f.type));\n }\n\n const options = [\n // single fields\n ...fields.map((f) => ({\n value: f.identifier,\n label: f.label || f.identifier,\n })),\n\n // ref star fields\n ...(opts?.includeRefStars ? mkRefStarFieldOptions([], fields) : []),\n ];\n\n options.sort((a, b) => a.label.localeCompare(b.label));\n\n if (\n opts?.includeSystemId &&\n !options.some((option) => option.value === \"_id\")\n ) {\n options.push({\n label: \"System ID\",\n value: \"_id\",\n });\n }\n\n return options;\n}\n\nfunction mkRefStarFieldOptions(\n fieldPath: (CmsList | CmsObject)[],\n nextFields: CmsFieldMeta[]\n): ValueLabelPair[] {\n return nextFields.flatMap((nestedField) => {\n if (nestedField.type === CmsMetaType.REF) {\n const fieldPathToRef = [...fieldPath, nestedField];\n return [\n {\n value: fieldPathToRef.map((f) => f.identifier).join(\".\") + \".*\",\n label:\n fieldPathToRef.map((f) => f.label || f.identifier).join(\".\") + \".*\",\n },\n ];\n } else if (\n nestedField.type === CmsMetaType.LIST ||\n nestedField.type === CmsMetaType.OBJECT\n ) {\n return mkRefStarFieldOptions(\n [...fieldPath, nestedField],\n nestedField.fields\n );\n } else {\n return [];\n }\n });\n}\n", "import type {\n Config,\n Field,\n FieldOrGroup,\n} from \"@react-awesome-query-builder/core\";\nimport type { RulesLogic } from \"json-logic-js\";\nimport { ApiCmsTable, CmsFieldMeta, CmsMetaType } from \"./schema\";\n\n/**\n * Maps Plasmic CMS table to react-awesome-query-builder config.\n *\n * The result will be handled by {@link rulesLogicToCmsWhere}.\n * Make sure it supports all operators defined here.\n */\nexport function cmsTableToQueryBuilderConfig(\n table: ApiCmsTable\n): Pick<Config, \"fields\"> {\n const qbFields: { [key: string]: FieldOrGroup } = {\n _id: {\n type: \"text\",\n label: \"System ID\",\n operators: [\"equal\", \"not_equal\"],\n },\n };\n for (const field of table.schema.fields) {\n const qbField = cmsFieldToQueryBuilderField(field);\n if (qbField) {\n qbFields[field.identifier] = qbField;\n }\n }\n return {\n fields: qbFields,\n };\n}\n\nfunction cmsFieldToQueryBuilderField(field: CmsFieldMeta): Field | undefined {\n const label = field.label || field.identifier;\n switch (field.type) {\n case CmsMetaType.TEXT:\n case CmsMetaType.LONG_TEXT:\n case CmsMetaType.REF: {\n return {\n type: \"text\",\n label,\n operators: [\"equal\", \"not_equal\", \"regex\"],\n };\n }\n case CmsMetaType.NUMBER: {\n return {\n type: \"number\",\n label,\n operators: [\n \"equal\",\n \"not_equal\",\n \"less\",\n \"less_or_equal\",\n \"greater\",\n \"greater_or_equal\",\n ],\n };\n }\n case CmsMetaType.BOOLEAN: {\n return {\n type: \"boolean\",\n label,\n };\n }\n case CmsMetaType.DATE_TIME: {\n return {\n type: \"datetime\",\n label,\n operators: [\n \"equal\",\n \"not_equal\",\n \"less\",\n \"less_or_equal\",\n \"greater\",\n \"greater_or_equal\",\n ],\n };\n }\n case CmsMetaType.ENUM: {\n return {\n type: \"select\",\n label,\n listValues: field.options,\n operators: [\"select_equals\", \"select_not_equals\", \"select_any_in\"],\n };\n }\n\n // Following types do not support filtering\n case CmsMetaType.COLOR:\n case CmsMetaType.FILE:\n case CmsMetaType.IMAGE:\n case CmsMetaType.LIST:\n case CmsMetaType.OBJECT:\n case CmsMetaType.RICH_TEXT:\n return;\n }\n}\n\n/**\n * Maps JsonLogic to Plasmic CMS API where query.\n *\n * See also:\n * - https://docs.plasmic.app/learn/plasmic-cms-api-reference/#filter-query\n * - makeSqlCondition in cms-util.ts\n */\nexport function rulesLogicToCmsWhere(logic: RulesLogic | undefined): any {\n if (logic === null || logic === undefined) {\n return undefined;\n } else if (typeof logic !== \"object\") {\n throw new Error(`unexpected logic: ${JSON.stringify(logic)}`);\n } else if (\"and\" in logic) {\n return {\n $and: logic[\"and\"].map(rulesLogicToCmsWhere),\n };\n } else if (\"or\" in logic) {\n return {\n $or: logic[\"or\"].map(rulesLogicToCmsWhere),\n };\n } else if (\"!\" in logic) {\n return {\n $not: rulesLogicToCmsWhere(logic[\"!\"]),\n };\n } else if (\"==\" in logic) {\n const [{ var: field }, operand] = logic[\"==\"] as [{ var: string }, unknown];\n return {\n [field]: operand,\n };\n } else if (\"!=\" in logic) {\n const [{ var: field }, operand] = logic[\"!=\"] as [{ var: string }, unknown];\n return {\n $not: { [field]: operand },\n };\n } else {\n // Map JsonLogic to Plasmic CMS where query:\n // JsonLogic: { \"<=\": [{ \"var\": \"age\" }, 18] }\n // CMS where: { \"$lt\": { \"age\": 18 } }\n const [key, value] = Object.entries(logic)[0];\n const apiOp: string | undefined = operatorMapping[key];\n if (apiOp) {\n const [{ var: field }, operand] = value as [{ var: string }, unknown];\n return { [field]: { [apiOp]: operand } };\n }\n\n throw new Error(`unexpected logic: ${JSON.stringify(logic)}`);\n }\n}\n\n/** Maps JsonLogic operator to Plasmic CMS operator. */\nconst operatorMapping: Record<string, string> = {\n \"<\": \"$lt\",\n \"<=\": \"$le\",\n \">\": \"$gt\",\n \">=\": \"$ge\",\n in: \"$in\",\n regex: \"$regex\",\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,sBAEA;;;ACkBP,SAAS,iBAAiB,QAAkC;AAC1D,SAAO;AAAA,IACL,OAAO,OAAO;AAAA,IACd,OAAO,OAAO;AAAA,IACd,QAAQ,OAAO;AAAA,IACf,OAAO,OAAO,UACV;AAAA,MACE;AAAA,QACE,OAAO,OAAO;AAAA,QACd,KAAK,OAAO,OAAO,SAAS;AAAA,MAC9B;AAAA,IACF,IACA;AAAA,IACJ,QAAQ,OAAO;AAAA,EACjB;AACF;AAEO,IAAM,YAAN,cAAwB,MAAM;AAAA,EACnC,YAAmB,QAAgB,SAAiB;AAClD,UAAM,OAAO;AADI;AAAA,EAEnB;AACF;AAEO,IAAM,MAAN,MAAU;AAAA,EACf,YAAoB,QAAwB;AAAxB;AAAA,EAAyB;AAAA,EAEvC,IAAI,IAAoC;AAAA,+CAApC,UAAkB,SAAc,CAAC,GAAG;AA9ChD;AA+CI,YAAM,MAAM,IAAI;AAAA,QACd,GAAG,KAAK,OAAO,6BAA6B,KAAK,OAAO,aAAa;AAAA,MACvE;AACA,YAAM,cAAc,OAAO,KAAK,MAAM,EAAE,OAAO,CAAC,QAAQ,QAAQ;AAC9D,cAAM,QAAQ,OAAO,GAAG;AACxB,YAAI,SAAS,MAAM;AACjB,iBAAO,GAAG,IAAI;AAAA,QAChB;AACA,eAAO;AAAA,MACT,GAAG,CAAC,CAAQ;AACZ,UAAI,SAAS,IAAI,gBAAgB,WAAW,EAAE,SAAS;AACvD,YAAM,WAAW,MAAM,MAAM,IAAI,SAAS,GAAG;AAAA,QAC3C,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,QAAQ;AAAA,UACR,4BAA4B,GAAG,KAAK,OAAO,cAAc,KAAK,OAAO;AAAA,QACvE;AAAA,QACA,MAAM;AAAA,MACR,CAAC;AAED,UAAI,SAAS,WAAW,KAAK;AAC3B,YAAI,UAAU,MAAM,SAAS,KAAK;AAClC,YAAI;AACF,gBAAM,OAAO,KAAK,MAAM,OAAO;AAC/B,eAAI,UAAK,UAAL,mBAAY,SAAS;AACvB,sBAAU,KAAK,MAAM;AAAA,UACvB;AAAA,QACF,SAAQ,GAAN;AAAA,QAEF;AACA,cAAM,IAAI,UAAU,SAAS,QAAQ,OAAO;AAAA,MAC9C;AAEA,aAAO,MAAM,SAAS,KAAK;AAAA,IAC7B;AAAA;AAAA,EAEM,cAAsC;AAAA;AAC1C,UAAI;AACF,cAAM,WAAW,MAAM,KAAK,IAAI,EAAE;AAClC,eAAO,SAAS;AAAA,MAClB,SAAS,GAAP;AACA,gBAAQ,MAAM,CAAC;AACf,cAAM;AAAA,MACR;AAAA,IACF;AAAA;AAAA,EAEQ,iBAAiB,OAAe;AA7F1C;AA8FI,QAAI,MAAM,QAAQ,KAAK,OAAO,QAAQ,GAAG;AACvC,aAAO,KAAK,OAAO,SAAS,SAAS,KAAK;AAAA,IAC5C,OAAO;AACL,cAAO,UAAK,OAAO,aAAZ,YAAwB;AAAA,IACjC;AAAA,EACF;AAAA,EAEM,MAAM,IAA+D;AAAA,+CAA/D,OAAe,SAAsB,CAAC,GAAyB;AArG7E;AAsGI,UAAI;AACF,cAAM,WAAW,MAAM,KAAK,IAAI,WAAW,eAAe;AAAA,UACxD,GAAG,KAAK,UAAU,iBAAiB,MAAM,CAAC;AAAA,UAC1C,OAAO,QAAO,UAAK,iBAAiB,KAAK,MAA3B,YAAgC,OAAO,QAAQ;AAAA,UAC7D,QAAQ,KAAK,OAAO;AAAA,QACtB,CAAC;AACD,eAAO,SAAS;AAAA,MAClB,SAAS,GAAP;AACA,gBAAQ,MAAM,CAAC;AACf,cAAM;AAAA,MACR;AAAA,IACF;AAAA;AAAA,EAEM,MACJ,IAEiB;AAAA,+CAFjB,OACA,SAAkD,CAAC,GAClC;AAtHrB;AAuHI,UAAI;AACF,cAAM,WAAW,MAAM,KAAK,IAAI,WAAW,eAAe;AAAA,UACxD,GAAG,KAAK,UAAU,iBAAiB,MAAM,CAAC;AAAA,UAC1C,OAAO,QAAO,UAAK,iBAAiB,KAAK,MAA3B,YAAgC,OAAO,QAAQ;AAAA,QAC/D,CAAC;AACD,eAAO,SAAS;AAAA,MAClB,SAAS,GAAP;AACA,gBAAQ,MAAM,CAAC;AACf,cAAM;AAAA,MACR;AAAA,IACF;AAAA;AACF;AAEO,SAAS,MAAM,QAAoC;AACxD,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AAEA,SAAO,IAAI,IAAI,MAAM;AACvB;;;AC1IO,IAAM,eAAe;;;ACGrB,IAAK,cAAL,kBAAKA,iBAAL;AACL,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,eAAY;AACZ,EAAAA,aAAA,YAAS;AACT,EAAAA,aAAA,WAAQ;AACR,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,eAAY;AACZ,EAAAA,aAAA,aAAU;AACV,EAAAA,aAAA,WAAQ;AACR,EAAAA,aAAA,eAAY;AACZ,EAAAA,aAAA,SAAM;AACN,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,YAAS;AACT,EAAAA,aAAA,UAAO;AAbG,SAAAA;AAAA,GAAA;;;ACWL,SAAS,eACd,QACkB;AAClB,MAAI,CAAC,QAAQ;AACX,WAAO,CAAC;AAAA,EACV;AAEA,SAAO,OAAO,IAAI,CAAC,WAAW;AAAA,IAC5B,OAAO,MAAM;AAAA,IACb,OAAO,MAAM;AAAA,EACf,EAAE;AACJ;AAEO,SAAS,eACd,QACA,iBACA,OACA,MAIkB;AAClB,MAAI,CAAC,QAAQ;AACX,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,QAAQ,OAAO,KAAK,CAAC,MAAM,EAAE,eAAe,eAAe;AACjE,MAAI,CAAC,OAAO;AACV,WAAO,CAAC;AAAA,EACV;AAEA,MAAI,SAAS,MAAM,OAAO;AAC1B,MAAI,OAAO;AACT,aAAS,OAAO,OAAO,CAAC,MAAM,MAAM,SAAS,EAAE,IAAI,CAAC;AAAA,EACtD;AAEA,QAAM,UAAU;AAAA;AAAA,IAEd,GAAG,OAAO,IAAI,CAAC,OAAO;AAAA,MACpB,OAAO,EAAE;AAAA,MACT,OAAO,EAAE,SAAS,EAAE;AAAA,IACtB,EAAE;AAAA;AAAA,IAGF,IAAI,6BAAM,mBAAkB,sBAAsB,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,EACnE;AAEA,UAAQ,KAAK,CAAC,GAAG,MAAM,EAAE,MAAM,cAAc,EAAE,KAAK,CAAC;AAErD,OACE,6BAAM,oBACN,CAAC,QAAQ,KAAK,CAAC,WAAW,OAAO,UAAU,KAAK,GAChD;AACA,YAAQ,KAAK;AAAA,MACX,OAAO;AAAA,MACP,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEA,SAAS,sBACP,WACA,YACkB;AAClB,SAAO,WAAW,QAAQ,CAAC,gBAAgB;AACzC,QAAI,YAAY,0BAA0B;AACxC,YAAM,iBAAiB,CAAC,GAAG,WAAW,WAAW;AACjD,aAAO;AAAA,QACL;AAAA,UACE,OAAO,eAAe,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,GAAG,IAAI;AAAA,UAC3D,OACE,eAAe,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,GAAG,IAAI;AAAA,QACnE;AAAA,MACF;AAAA,IACF,WACE,YAAY,8BACZ,YAAY,gCACZ;AACA,aAAO;AAAA,QACL,CAAC,GAAG,WAAW,WAAW;AAAA,QAC1B,YAAY;AAAA,MACd;AAAA,IACF,OAAO;AACL,aAAO,CAAC;AAAA,IACV;AAAA,EACF,CAAC;AACH;;;ACxFO,SAAS,6BACd,OACwB;AACxB,QAAM,WAA4C;AAAA,IAChD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW,CAAC,SAAS,WAAW;AAAA,IAClC;AAAA,EACF;AACA,aAAW,SAAS,MAAM,OAAO,QAAQ;AACvC,UAAM,UAAU,4BAA4B,KAAK;AACjD,QAAI,SAAS;AACX,eAAS,MAAM,UAAU,IAAI;AAAA,IAC/B;AAAA,EACF;AACA,SAAO;AAAA,IACL,QAAQ;AAAA,EACV;AACF;AAEA,SAAS,4BAA4B,OAAwC;AAC3E,QAAM,QAAQ,MAAM,SAAS,MAAM;AACnC,UAAQ,MAAM,MAAM;AAAA,IAClB;AAAA,IACA;AAAA,IACA,sBAAsB;AACpB,aAAO;AAAA,QACL,MAAM;AAAA,QACN;AAAA,QACA,WAAW,CAAC,SAAS,aAAa,OAAO;AAAA,MAC3C;AAAA,IACF;AAAA,IACA,4BAAyB;AACvB,aAAO;AAAA,QACL,MAAM;AAAA,QACN;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,8BAA0B;AACxB,aAAO;AAAA,QACL,MAAM;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA,kCAA4B;AAC1B,aAAO;AAAA,QACL,MAAM;AAAA,QACN;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,wBAAuB;AACrB,aAAO;AAAA,QACL,MAAM;AAAA,QACN;AAAA,QACA,YAAY,MAAM;AAAA,QAClB,WAAW,CAAC,iBAAiB,qBAAqB,eAAe;AAAA,MACnE;AAAA,IACF;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AACE;AAAA,EACJ;AACF;AASO,SAAS,qBAAqB,OAAoC;AACvE,MAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,WAAO;AAAA,EACT,WAAW,OAAO,UAAU,UAAU;AACpC,UAAM,IAAI,MAAM,qBAAqB,KAAK,UAAU,KAAK,GAAG;AAAA,EAC9D,WAAW,SAAS,OAAO;AACzB,WAAO;AAAA,MACL,MAAM,MAAM,KAAK,EAAE,IAAI,oBAAoB;AAAA,IAC7C;AAAA,EACF,WAAW,QAAQ,OAAO;AACxB,WAAO;AAAA,MACL,KAAK,MAAM,IAAI,EAAE,IAAI,oBAAoB;AAAA,IAC3C;AAAA,EACF,WAAW,OAAO,OAAO;AACvB,WAAO;AAAA,MACL,MAAM,qBAAqB,MAAM,GAAG,CAAC;AAAA,IACvC;AAAA,EACF,WAAW,QAAQ,OAAO;AACxB,UAAM,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,IAAI,MAAM,IAAI;AAC5C,WAAO;AAAA,MACL,CAAC,KAAK,GAAG;AAAA,IACX;AAAA,EACF,WAAW,QAAQ,OAAO;AACxB,UAAM,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,IAAI,MAAM,IAAI;AAC5C,WAAO;AAAA,MACL,MAAM,EAAE,CAAC,KAAK,GAAG,QAAQ;AAAA,IAC3B;AAAA,EACF,OAAO;AAIL,UAAM,CAAC,KAAK,KAAK,IAAI,OAAO,QAAQ,KAAK,EAAE,CAAC;AAC5C,UAAM,QAA4B,gBAAgB,GAAG;AACrD,QAAI,OAAO;AACT,YAAM,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,IAAI;AAClC,aAAO,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,GAAG,QAAQ,EAAE;AAAA,IACzC;AAEA,UAAM,IAAI,MAAM,qBAAqB,KAAK,UAAU,KAAK,GAAG;AAAA,EAC9D;AACF;AAGA,IAAM,kBAA0C;AAAA,EAC9C,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,OAAO;AACT;;;ALpJA,SAAS,aAAa;AAVtB;AAWE,UAAQ,gBAAmB,sBAAsB,MAAzC,YAA8C;AACxD;AAeA,SAAS,qBAAqB,EAAE,OAAO,eAAe,IAAiB,CAAC,GAGtE;AACA,MAAI,CAAC,SAAS,CAAC,gBAAgB;AAC7B,WAAO;AAAA,MACL,SAAS;AAAA,MACT,SAAS,MAAS;AAAI,iBAAE,QAAQ,CAAC,EAAE;AAAA;AAAA,IACrC;AAAA,EACF;AACA,SAAO;AAAA,IACL,SAAS,cAAc,KAAK,UAAU;AAAA,MACpC;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,SAAS,MAAY;AACnB,YAAM,MAAM,MAAM;AAAA,QAChB,YAAY;AAAA,QACZ,eAAe;AAAA,QACf,MAAM,WAAW;AAAA,MACnB,CAAC;AACD,YAAM,SAAS,MAAM,IAAI,YAAY;AACrC,aAAO,EAAE,OAAO;AAAA,IAClB;AAAA,EACF;AACF;AAEA,IAAM,aAAa;AAAA,EACjB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UACE;AACJ;AAEA,IAAM,sBAAsB;AAAA,EAC1B,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UACE;AACJ;AAEA,IAAM,eAAe;AAAA,EACnB,MAAM;AAAA,EACN,SAAS,CAAC,OAAgB,QAAmB;AAC3C,QAAI,EAAC,2BAAK,SAAQ;AAChB,aAAO,CAAC;AAAA,IACV;AACA,WAAO,IAAI,OAAO,IAAI,CAAC,WAAiD;AAAA,MACtE,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,IACf,EAAE;AAAA,EACJ;AACF;AAEA,IAAM,cAAc;AAAA,EAClB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,EACb,kBAAkB,CAAC,YAAY;AAAA,EAC/B,SAAS,CAAC,CAAC,IAAI,GAAkC,QAAmB;AAClE,UAAM,UAAU,6BAAM;AACtB,WAAO,eAAe,IAAI,QAAQ,SAAS,QAAW;AAAA,MACpD,iBAAiB;AAAA,IACnB,CAAC;AAAA,EACH;AACF;AAEA,IAAM,kBAAkB;AAAA,EACtB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ,CAAC,CAAC,IAAI,GAAkC,QAAmB;AACjE,UAAM,UAAU,6BAAM;AACtB,UAAM,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,EAAE,eAAe,OAAO;AAC7D,QAAI,OAAO;AACT,aAAO,6BAA6B,KAAK;AAAA,IAC3C,OAAO;AACL,aAAO,EAAE,QAAQ,CAAC,EAAE;AAAA,IACtB;AAAA,EACF;AACF;AAEA,IAAM,eAAe;AAAA,EACnB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS,CAAC,CAAC,IAAI,GAAkC,QAAmB;AAClE,UAAM,UAAU,6BAAM;AACtB,WAAO,eAAe,IAAI,QAAQ,SAAS,QAAW;AAAA,MACpD,iBAAiB;AAAA,IACnB,CAAC;AAAA,EACH;AACF;AAEA,IAAM,sBAAsB;AAAA,EAC1B,OAAO;AAAA,EACP,MAAM;AAAA,EACN,SAAS;AAAA,IACP;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,kBAAkB;AACpB;AAEA,IAAM,aAAa;AAAA,EACjB,MAAM;AAAA,EACN,aAAa;AACf;AAEA,IAAM,cAAc;AAAA,EAClB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,kBAAkB;AACpB;AAEA,IAAM,gBAAgB;AAAA,EACpB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,kBAAkB;AACpB;AAEA,IAAM,cAAc;AAAA,EAClB,MAAM;AAAA,EACN,aAAa;AACf;AAEA,SAAsB,YAAY,IAAwC;AAAA,6CAAxC,EAAE,OAAO,eAAe,GAAgB;AACxE,QAAI,CAAC,SAAS,CAAC,gBAAgB;AAC7B,aAAO,CAAC;AAAA,IACV;AAEA,UAAM,MAAM,MAAM;AAAA,MAChB,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,MAAM,WAAW;AAAA,IACnB,CAAC;AAED,WAAO,IAAI,YAAY;AAAA,EACzB;AAAA;AAaA,SAAsB,aAAa,IAYd;AAAA,6CAZc;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAqB;AACnB,QAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,SAAS;AACzC,aAAO,CAAC;AAAA,IACV;AAEA,UAAM,MAAM,MAAM;AAAA,MAChB,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,MAAM,WAAW;AAAA,MACjB;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO,IAAI,MAAM,SAAS;AAAA,MACxB,QAAQ;AAAA,MACR,OAAO,qBAAqB,UAAU;AAAA,MACtC;AAAA,MACA,MAAM,mBAAmB;AAAA,MACzB;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAOA,SAAsB,WAAW,IAMd;AAAA,6CANc;AAAA,IAC/B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAmB;AACjB,QAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,SAAS;AACzC,aAAO;AAAA,IACT;AAEA,UAAM,MAAM,MAAM;AAAA,MAChB,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,MAAM,WAAW;AAAA,MACjB;AAAA,IACF,CAAC;AAED,WAAO,IAAI,MAAM,SAAS;AAAA,MACxB,OAAO,qBAAqB,UAAU;AAAA,IACxC,CAAC;AAAA,EACH;AAAA;AAEO,SAAS,wBAAwB,QAAoC;AAC1E,WAAS,kBACP,IACA,MACA;AACA,QAAI,QAAQ;AACV,aAAO,iBAAiB,IAAI,IAAI;AAAA,IAClC,OAAO;AACL,uBAAiB,IAAI,IAAI;AAAA,IAC3B;AAAA,EACF;AAEA,oBAAkB,aAAa;AAAA,IAC7B,MAAM;AAAA,IACN,WAAW;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,QAAQ;AAAA,MACN;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,OAAO;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,oBAAkB,cAAc;AAAA,IAC9B,MAAM;AAAA,IACN,WAAW;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,QAAQ;AAAA,MACN;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,OAAO;AAAA,UACP,gBAAgB;AAAA,UAChB,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,YAAY;AAAA,UACZ,SAAS;AAAA,UACT,gBAAgB;AAAA,UAChB,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IACA,WAAW;AAAA,EACb,CAAC;AAED,oBAAkB,YAAY;AAAA,IAC5B,MAAM;AAAA,IACN,WAAW;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,QAAQ;AAAA,MACN;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,OAAO;AAAA,UACP,gBAAgB;AAAA,UAChB,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,IACA,WAAW;AAAA,EACb,CAAC;AACH;",
6
6
  "names": ["CmsMetaType"]
7
7
  }
package/dist/index.js CHANGED
@@ -187,6 +187,24 @@ function mkApi(config) {
187
187
  // src/constants.ts
188
188
  var DEFAULT_HOST = "https://data.plasmic.app";
189
189
 
190
+ // src/schema.ts
191
+ var CmsMetaType = /* @__PURE__ */ ((CmsMetaType2) => {
192
+ CmsMetaType2["TEXT"] = "text";
193
+ CmsMetaType2["LONG_TEXT"] = "long-text";
194
+ CmsMetaType2["NUMBER"] = "number";
195
+ CmsMetaType2["IMAGE"] = "image";
196
+ CmsMetaType2["FILE"] = "file";
197
+ CmsMetaType2["DATE_TIME"] = "date-time";
198
+ CmsMetaType2["BOOLEAN"] = "boolean";
199
+ CmsMetaType2["COLOR"] = "color";
200
+ CmsMetaType2["RICH_TEXT"] = "rich-text";
201
+ CmsMetaType2["REF"] = "ref";
202
+ CmsMetaType2["LIST"] = "list";
203
+ CmsMetaType2["OBJECT"] = "object";
204
+ CmsMetaType2["ENUM"] = "enum";
205
+ return CmsMetaType2;
206
+ })(CmsMetaType || {});
207
+
190
208
  // src/util.ts
191
209
  function mkTableOptions(tables) {
192
210
  if (!tables) {
@@ -197,7 +215,7 @@ function mkTableOptions(tables) {
197
215
  label: table.name
198
216
  }));
199
217
  }
200
- function mkFieldOptions(tables, tableIdentifier, types) {
218
+ function mkFieldOptions(tables, tableIdentifier, types, opts) {
201
219
  if (!tables) {
202
220
  return [];
203
221
  }
@@ -209,11 +227,17 @@ function mkFieldOptions(tables, tableIdentifier, types) {
209
227
  if (types) {
210
228
  fields = fields.filter((f) => types.includes(f.type));
211
229
  }
212
- const options = fields.map((f) => ({
213
- value: f.identifier,
214
- label: f.label || f.identifier
215
- }));
216
- if (!options.some((option) => option.value === "_id")) {
230
+ const options = [
231
+ // single fields
232
+ ...fields.map((f) => ({
233
+ value: f.identifier,
234
+ label: f.label || f.identifier
235
+ })),
236
+ // ref star fields
237
+ ...(opts == null ? void 0 : opts.includeRefStars) ? mkRefStarFieldOptions([], fields) : []
238
+ ];
239
+ options.sort((a, b) => a.label.localeCompare(b.label));
240
+ if ((opts == null ? void 0 : opts.includeSystemId) && !options.some((option) => option.value === "_id")) {
217
241
  options.push({
218
242
  label: "System ID",
219
243
  value: "_id"
@@ -221,24 +245,26 @@ function mkFieldOptions(tables, tableIdentifier, types) {
221
245
  }
222
246
  return options;
223
247
  }
224
-
225
- // src/schema.ts
226
- var CmsMetaType = /* @__PURE__ */ ((CmsMetaType2) => {
227
- CmsMetaType2["TEXT"] = "text";
228
- CmsMetaType2["LONG_TEXT"] = "long-text";
229
- CmsMetaType2["NUMBER"] = "number";
230
- CmsMetaType2["IMAGE"] = "image";
231
- CmsMetaType2["FILE"] = "file";
232
- CmsMetaType2["DATE_TIME"] = "date-time";
233
- CmsMetaType2["BOOLEAN"] = "boolean";
234
- CmsMetaType2["COLOR"] = "color";
235
- CmsMetaType2["RICH_TEXT"] = "rich-text";
236
- CmsMetaType2["REF"] = "ref";
237
- CmsMetaType2["LIST"] = "list";
238
- CmsMetaType2["OBJECT"] = "object";
239
- CmsMetaType2["ENUM"] = "enum";
240
- return CmsMetaType2;
241
- })(CmsMetaType || {});
248
+ function mkRefStarFieldOptions(fieldPath, nextFields) {
249
+ return nextFields.flatMap((nestedField) => {
250
+ if (nestedField.type === "ref" /* REF */) {
251
+ const fieldPathToRef = [...fieldPath, nestedField];
252
+ return [
253
+ {
254
+ value: fieldPathToRef.map((f) => f.identifier).join(".") + ".*",
255
+ label: fieldPathToRef.map((f) => f.label || f.identifier).join(".") + ".*"
256
+ }
257
+ ];
258
+ } else if (nestedField.type === "list" /* LIST */ || nestedField.type === "object" /* OBJECT */) {
259
+ return mkRefStarFieldOptions(
260
+ [...fieldPath, nestedField],
261
+ nestedField.fields
262
+ );
263
+ } else {
264
+ return [];
265
+ }
266
+ });
267
+ }
242
268
 
243
269
  // src/where.ts
244
270
  function cmsTableToQueryBuilderConfig(table) {
@@ -373,7 +399,7 @@ function getCmsHost() {
373
399
  var _a;
374
400
  return (_a = globalThis["__PLASMIC_CMS_HOST__"]) != null ? _a : DEFAULT_HOST;
375
401
  }
376
- function sharedTableFnContext(cmsId, cmsPublicToken, ..._args) {
402
+ function sharedTableFnContext({ cmsId, cmsPublicToken } = {}) {
377
403
  if (!cmsId || !cmsPublicToken) {
378
404
  return {
379
405
  dataKey: "",
@@ -399,17 +425,16 @@ function sharedTableFnContext(cmsId, cmsPublicToken, ..._args) {
399
425
  };
400
426
  }
401
427
  var cmsIdParam = {
402
- name: "cmsId",
403
428
  type: "string",
404
- description: "Find the CMS ID on the Plasmic CMS settings page."
429
+ description: "ID of the CMS.",
430
+ helpText: "Find the CMS ID on the [Plasmic CMS settings page](https://docs.plasmic.app/learn/plasmic-cms-api-reference/#find-your-cms-ids-public-token-and-secret-token)"
405
431
  };
406
432
  var cmsPublicTokenParam = {
407
- name: "cmsPublicToken",
408
433
  type: "string",
409
- description: "Find the Public Token on the Plasmic CMS settings page."
434
+ description: "Public token of the CMS.",
435
+ helpText: "Find the public token on the [Plasmic CMS settings page](https://docs.plasmic.app/learn/plasmic-cms-api-reference/#find-your-cms-ids-public-token-and-secret-token)"
410
436
  };
411
437
  var tableIdParam = {
412
- name: "tableId",
413
438
  type: "choice",
414
439
  options: (_args, ctx) => {
415
440
  if (!(ctx == null ? void 0 : ctx.tables)) {
@@ -422,22 +447,22 @@ var tableIdParam = {
422
447
  }
423
448
  };
424
449
  var selectParam = {
425
- name: "select",
426
450
  type: "choice",
427
451
  multiSelect: true,
428
452
  description: "Fields to fetch. Defaults to all fields.",
429
453
  defaultValueHint: ["Default: *"],
430
- options: (args, ctx) => {
431
- const tableId = args[2];
432
- return mkFieldOptions(ctx.tables, tableId);
454
+ options: ([opts], ctx) => {
455
+ const tableId = opts == null ? void 0 : opts.tableId;
456
+ return mkFieldOptions(ctx.tables, tableId, void 0, {
457
+ includeRefStars: true
458
+ });
433
459
  }
434
460
  };
435
461
  var whereLogicParam = {
436
- name: "where",
437
462
  type: "queryBuilder",
438
463
  description: "Filter fetched entries. Defaults to fetch all entries.",
439
- config: (args, ctx) => {
440
- const tableId = args[2];
464
+ config: ([opts], ctx) => {
465
+ const tableId = opts == null ? void 0 : opts.tableId;
441
466
  const table = ctx.tables.find((t) => t.identifier === tableId);
442
467
  if (table) {
443
468
  return cmsTableToQueryBuilderConfig(table);
@@ -447,16 +472,16 @@ var whereLogicParam = {
447
472
  }
448
473
  };
449
474
  var orderByParam = {
450
- name: "orderBy",
451
475
  type: "choice",
452
476
  description: "Field to order entries by. Defaults to creation order.",
453
- options: (args, ctx) => {
454
- const tableId = args[2];
455
- return mkFieldOptions(ctx.tables, tableId);
477
+ options: ([opts], ctx) => {
478
+ const tableId = opts == null ? void 0 : opts.tableId;
479
+ return mkFieldOptions(ctx.tables, tableId, void 0, {
480
+ includeRefStars: true
481
+ });
456
482
  }
457
483
  };
458
484
  var orderDirectionParam = {
459
- name: "orderDirection",
460
485
  label: "Direction",
461
486
  type: "choice",
462
487
  options: [
@@ -472,29 +497,28 @@ var orderDirectionParam = {
472
497
  defaultValueHint: "Default: Ascending"
473
498
  };
474
499
  var limitParam = {
475
- name: "limit",
476
500
  type: "number",
477
501
  description: "Maximum number of entries to fetch."
478
502
  };
479
503
  var offsetParam = {
480
- name: "offset",
481
504
  type: "number",
482
505
  description: "Number of entries to skip.",
483
506
  defaultValueHint: 0
484
507
  };
485
508
  var useDraftParam = {
486
- name: "useDraft",
487
509
  type: "boolean",
488
510
  description: "Whether to use draft data.",
489
511
  defaultValueHint: false
490
512
  };
491
513
  var localeParam = {
492
- name: "locale",
493
514
  type: "string",
494
515
  description: "The locale to use. Defaults to base locale."
495
516
  };
496
- function fetchTables(cmsId, cmsPublicToken) {
497
- return __async(this, null, function* () {
517
+ function fetchTables(_0) {
518
+ return __async(this, arguments, function* ({ cmsId, cmsPublicToken }) {
519
+ if (!cmsId || !cmsPublicToken) {
520
+ return [];
521
+ }
498
522
  const api = mkApi({
499
523
  databaseId: cmsId,
500
524
  databaseToken: cmsPublicToken,
@@ -503,8 +527,20 @@ function fetchTables(cmsId, cmsPublicToken) {
503
527
  return api.fetchTables();
504
528
  });
505
529
  }
506
- function fetchContent(cmsId, cmsPublicToken, tableId, select, whereLogic, orderBy, orderDirection, limit, offset, useDraft, locale) {
507
- return __async(this, null, function* () {
530
+ function fetchContent(_0) {
531
+ return __async(this, arguments, function* ({
532
+ cmsId,
533
+ cmsPublicToken,
534
+ tableId,
535
+ select,
536
+ whereLogic,
537
+ orderBy,
538
+ orderDirection,
539
+ limit,
540
+ offset,
541
+ useDraft,
542
+ locale
543
+ }) {
508
544
  if (!cmsId || !cmsPublicToken || !tableId) {
509
545
  return [];
510
546
  }
@@ -525,8 +561,14 @@ function fetchContent(cmsId, cmsPublicToken, tableId, select, whereLogic, orderB
525
561
  });
526
562
  });
527
563
  }
528
- function fetchCount(cmsId, cmsPublicToken, tableId, whereLogic, useDraft) {
529
- return __async(this, null, function* () {
564
+ function fetchCount(_0) {
565
+ return __async(this, arguments, function* ({
566
+ cmsId,
567
+ cmsPublicToken,
568
+ tableId,
569
+ useDraft,
570
+ whereLogic
571
+ }) {
530
572
  if (!cmsId || !cmsPublicToken || !tableId) {
531
573
  return 0;
532
574
  }
@@ -555,7 +597,17 @@ function registerAllCmsFunctions(loader) {
555
597
  displayName: "Fetch Plasmic CMS Tables",
556
598
  description: "Fetches table metadata from Plasmic CMS",
557
599
  importPath: "@plasmicpkgs/cms",
558
- params: [cmsIdParam, cmsPublicTokenParam]
600
+ params: [
601
+ {
602
+ type: "object",
603
+ display: "flatten",
604
+ name: "Opts",
605
+ fields: {
606
+ cmsId: cmsIdParam,
607
+ cmsPublicToken: cmsPublicTokenParam
608
+ }
609
+ }
610
+ ]
559
611
  });
560
612
  _registerFunction(fetchContent, {
561
613
  name: "fetchContent",
@@ -564,17 +616,24 @@ function registerAllCmsFunctions(loader) {
564
616
  description: "Fetch content from a Plasmic CMS table",
565
617
  importPath: "@plasmicpkgs/cms",
566
618
  params: [
567
- cmsIdParam,
568
- cmsPublicTokenParam,
569
- tableIdParam,
570
- selectParam,
571
- whereLogicParam,
572
- orderByParam,
573
- orderDirectionParam,
574
- limitParam,
575
- offsetParam,
576
- useDraftParam,
577
- localeParam
619
+ {
620
+ type: "object",
621
+ display: "flatten",
622
+ name: "Opts",
623
+ fields: {
624
+ cmsId: cmsIdParam,
625
+ cmsPublicToken: cmsPublicTokenParam,
626
+ tableId: tableIdParam,
627
+ select: selectParam,
628
+ whereLogic: whereLogicParam,
629
+ orderBy: orderByParam,
630
+ orderDirection: orderDirectionParam,
631
+ limit: limitParam,
632
+ offset: offsetParam,
633
+ useDraft: useDraftParam,
634
+ locale: localeParam
635
+ }
636
+ }
578
637
  ],
579
638
  fnContext: sharedTableFnContext
580
639
  });
@@ -585,11 +644,18 @@ function registerAllCmsFunctions(loader) {
585
644
  description: "Fetch the count of entries from a Plasmic CMS table",
586
645
  importPath: "@plasmicpkgs/cms",
587
646
  params: [
588
- cmsIdParam,
589
- cmsPublicTokenParam,
590
- tableIdParam,
591
- whereLogicParam,
592
- useDraftParam
647
+ {
648
+ type: "object",
649
+ display: "flatten",
650
+ name: "Opts",
651
+ fields: {
652
+ cmsId: cmsIdParam,
653
+ cmsPublicToken: cmsPublicTokenParam,
654
+ tableId: tableIdParam,
655
+ whereLogic: whereLogicParam,
656
+ useDraft: useDraftParam
657
+ }
658
+ }
593
659
  ],
594
660
  fnContext: sharedTableFnContext
595
661
  });
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/index.ts", "../src/api.ts", "../src/constants.ts", "../src/util.ts", "../src/schema.ts", "../src/where.ts"],
4
- "sourcesContent": ["import registerFunction, {\n CustomFunctionMeta,\n} from \"@plasmicapp/host/registerFunction\";\nimport type { RulesLogic } from \"json-logic-js\";\nimport { mkApi } from \"./api\";\nimport { DEFAULT_HOST } from \"./constants\";\nimport { ApiCmsTable } from \"./schema\";\nimport { mkFieldOptions } from \"./util\";\nimport { cmsTableToQueryBuilderConfig, rulesLogicToCmsWhere } from \"./where\";\n\nfunction getCmsHost() {\n return (globalThis as any)[\"__PLASMIC_CMS_HOST__\"] ?? DEFAULT_HOST;\n}\n\ninterface FnContext {\n tables: ApiCmsTable[];\n}\n\nfunction sharedTableFnContext(\n cmsId?: string,\n cmsPublicToken?: string,\n ..._args: unknown[]\n): {\n dataKey: string;\n fetcher: () => Promise<FnContext>;\n} {\n if (!cmsId || !cmsPublicToken) {\n return {\n dataKey: \"\",\n fetcher: async () => ({ tables: [] }),\n };\n }\n return {\n dataKey: `cms_tables/${JSON.stringify({\n cmsId,\n cmsPublicToken,\n })}`,\n fetcher: async () => {\n const api = mkApi({\n databaseId: cmsId,\n databaseToken: cmsPublicToken,\n host: getCmsHost(),\n });\n const tables = await api.fetchTables();\n return { tables };\n },\n };\n}\n\n// TODO: Handle markdown in descriptions and link to https://docs.plasmic.app/learn/plasmic-cms-api-reference/#find-your-cms-ids-public-token-and-secret-token\nconst cmsIdParam = {\n name: \"cmsId\",\n type: \"string\",\n description: \"Find the CMS ID on the Plasmic CMS settings page.\",\n} as const;\n\nconst cmsPublicTokenParam = {\n name: \"cmsPublicToken\",\n type: \"string\",\n description: \"Find the Public Token on the Plasmic CMS settings page.\",\n} as const;\n\nconst tableIdParam = {\n name: \"tableId\",\n type: \"choice\",\n options: (_args: unknown, ctx: FnContext) => {\n if (!ctx?.tables) {\n return [];\n }\n return ctx.tables.map((table: { identifier: string; name: string }) => ({\n value: table.identifier,\n label: table.name,\n }));\n },\n} as const;\n\nconst selectParam = {\n name: \"select\",\n type: \"choice\",\n multiSelect: true,\n description: \"Fields to fetch. Defaults to all fields.\",\n defaultValueHint: [\"Default: *\"] as string[],\n options: (args: { 2?: string | undefined }, ctx: FnContext) => {\n const tableId = args[2];\n return mkFieldOptions(ctx.tables, tableId);\n },\n} as const;\n\nconst whereLogicParam = {\n name: \"where\",\n type: \"queryBuilder\",\n description: \"Filter fetched entries. Defaults to fetch all entries.\",\n config: (args: { 2?: string | undefined }, ctx: FnContext) => {\n const tableId = args[2];\n const table = ctx.tables.find((t) => t.identifier === tableId);\n if (table) {\n return cmsTableToQueryBuilderConfig(table);\n } else {\n return { fields: {} };\n }\n },\n} as const;\n\nconst orderByParam = {\n name: \"orderBy\",\n type: \"choice\",\n description: \"Field to order entries by. Defaults to creation order.\",\n options: (args: { 2?: string | undefined }, ctx: FnContext) => {\n const tableId = args[2];\n return mkFieldOptions(ctx.tables, tableId);\n },\n} as const;\n\nconst orderDirectionParam = {\n name: \"orderDirection\",\n label: \"Direction\",\n type: \"choice\",\n options: [\n {\n value: \"asc\",\n label: \"Ascending\",\n },\n {\n value: \"desc\",\n label: \"Descending\",\n },\n ] as { value: \"asc\" | \"desc\"; label: string }[],\n defaultValueHint: \"Default: Ascending\",\n} as const;\n\nconst limitParam = {\n name: \"limit\",\n type: \"number\",\n description: \"Maximum number of entries to fetch.\",\n} as const;\n\nconst offsetParam = {\n name: \"offset\",\n type: \"number\",\n description: \"Number of entries to skip.\",\n defaultValueHint: 0,\n} as const;\n\nconst useDraftParam = {\n name: \"useDraft\",\n type: \"boolean\",\n description: \"Whether to use draft data.\",\n defaultValueHint: false,\n} as const;\n\nconst localeParam = {\n name: \"locale\",\n type: \"string\",\n description: \"The locale to use. Defaults to base locale.\",\n} as const;\n\nexport async function fetchTables(cmsId: string, cmsPublicToken: string) {\n const api = mkApi({\n databaseId: cmsId,\n databaseToken: cmsPublicToken,\n host: getCmsHost(),\n });\n\n return api.fetchTables();\n}\n\nexport async function fetchContent(\n cmsId?: string,\n cmsPublicToken?: string,\n tableId?: string,\n select?: string[],\n whereLogic?: RulesLogic,\n orderBy?: string,\n orderDirection?: \"asc\" | \"desc\",\n limit?: number,\n offset?: number,\n useDraft?: boolean,\n locale?: string\n) {\n if (!cmsId || !cmsPublicToken || !tableId) {\n return [];\n }\n\n const api = mkApi({\n databaseId: cmsId,\n databaseToken: cmsPublicToken,\n host: getCmsHost(),\n useDraft,\n locale,\n });\n\n return api.query(tableId, {\n fields: select,\n where: rulesLogicToCmsWhere(whereLogic),\n orderBy,\n desc: orderDirection === \"desc\",\n limit,\n offset,\n });\n}\n\nexport async function fetchCount(\n cmsId?: string,\n cmsPublicToken?: string,\n tableId?: string,\n whereLogic?: RulesLogic,\n useDraft?: boolean\n) {\n if (!cmsId || !cmsPublicToken || !tableId) {\n return 0;\n }\n\n const api = mkApi({\n databaseId: cmsId,\n databaseToken: cmsPublicToken,\n host: getCmsHost(),\n useDraft,\n });\n\n return api.count(tableId, {\n where: rulesLogicToCmsWhere(whereLogic),\n });\n}\n\nexport function registerAllCmsFunctions(loader?: { registerFunction: any }) {\n function _registerFunction<T extends (...args: any[]) => any>(\n fn: T,\n meta: CustomFunctionMeta<T>\n ) {\n if (loader) {\n loader.registerFunction(fn, meta);\n } else {\n registerFunction(fn, meta);\n }\n }\n\n _registerFunction(fetchTables, {\n name: \"fetchTables\",\n namespace: \"plasmicCms\",\n displayName: \"Fetch Plasmic CMS Tables\",\n description: \"Fetches table metadata from Plasmic CMS\",\n importPath: \"@plasmicpkgs/cms\",\n params: [cmsIdParam, cmsPublicTokenParam],\n });\n\n _registerFunction(fetchContent, {\n name: \"fetchContent\",\n namespace: \"plasmicCms\",\n displayName: \"Fetch Plasmic CMS Content\",\n description: \"Fetch content from a Plasmic CMS table\",\n importPath: \"@plasmicpkgs/cms\",\n params: [\n cmsIdParam,\n cmsPublicTokenParam,\n tableIdParam,\n selectParam,\n whereLogicParam,\n orderByParam,\n orderDirectionParam,\n limitParam,\n offsetParam,\n useDraftParam,\n localeParam,\n ],\n fnContext: sharedTableFnContext,\n });\n\n _registerFunction(fetchCount, {\n name: \"fetchCount\",\n namespace: \"plasmicCms\",\n displayName: \"Fetch Plasmic CMS Count\",\n description: \"Fetch the count of entries from a Plasmic CMS table\",\n importPath: \"@plasmicpkgs/cms\",\n params: [\n cmsIdParam,\n cmsPublicTokenParam,\n tableIdParam,\n whereLogicParam,\n useDraftParam,\n ],\n fnContext: sharedTableFnContext,\n });\n}\n\n// Export utilities and types with underscore prefix\nexport { API as _API, HttpError as _HttpError, mkApi as _mkApi } from \"./api\";\n\nexport type {\n DatabaseConfig as _DatabaseConfig,\n QueryParams as _QueryParams,\n} from \"./api\";\n\nexport { DEFAULT_HOST as _DEFAULT_HOST } from \"./constants\";\n\nexport { CmsMetaType as _CmsMetaType } from \"./schema\";\nexport type {\n ApiCmsQuery as _ApiCmsQuery,\n ApiCmsRow as _ApiCmsRow,\n ApiCmsTable as _ApiCmsTable,\n} from \"./schema\";\n\nexport type {\n CmsBaseType as _CmsBaseType,\n CmsBoolean as _CmsBoolean,\n CmsDateTime as _CmsDateTime,\n CmsEnum as _CmsEnum,\n CmsFieldMeta as _CmsFieldMeta,\n CmsFile as _CmsFile,\n CmsImage as _CmsImage,\n CmsLongText as _CmsLongText,\n CmsNumber as _CmsNumber,\n CmsRef as _CmsRef,\n CmsRichText as _CmsRichText,\n CmsTableSchema as _CmsTableSchema,\n CmsText as _CmsText,\n CmsTextLike as _CmsTextLike,\n CmsType as _CmsType,\n} from \"./schema\";\n\nexport {\n mkFieldOptions as _mkFieldOptions,\n mkTableOptions as _mkTableOptions,\n} from \"./util\";\n", "import { ApiCmsQuery, ApiCmsRow, ApiCmsTable } from \"./schema\";\n\nexport interface DatabaseConfig {\n host: string;\n databaseId: string;\n databaseToken: string;\n locale?: string;\n useDraft?: boolean | string[];\n}\n\nexport interface QueryParams {\n useDraft?: boolean;\n where?: any;\n orderBy?: string;\n desc?: boolean;\n limit?: number;\n offset?: number;\n fields?: string[];\n}\n\nfunction queryParamsToApi(params: QueryParams): ApiCmsQuery {\n return {\n where: params.where,\n limit: params.limit,\n offset: params.offset,\n order: params.orderBy\n ? [\n {\n field: params.orderBy,\n dir: params.desc ? \"desc\" : \"asc\",\n },\n ]\n : undefined,\n fields: params.fields,\n };\n}\n\nexport class HttpError extends Error {\n constructor(public status: number, message: string) {\n super(message);\n }\n}\n\nexport class API {\n constructor(private config: DatabaseConfig) {}\n\n async get(endpoint: string, params: any = {}) {\n const url = new URL(\n `${this.config.host}/api/v1/cms/databases/${this.config.databaseId}${endpoint}`\n );\n const fixedParams = Object.keys(params).reduce((newObj, key) => {\n const value = params[key];\n if (value != null) {\n newObj[key] = value;\n }\n return newObj;\n }, {} as any);\n url.search = new URLSearchParams(fixedParams).toString();\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: {\n accept: \"*/*\",\n \"x-plasmic-api-cms-tokens\": `${this.config.databaseId}:${this.config.databaseToken}`,\n },\n mode: \"cors\",\n });\n\n if (response.status !== 200) {\n let message = await response.text();\n try {\n const json = JSON.parse(message);\n if (json.error?.message) {\n message = json.error.message;\n }\n } catch {\n // ignored\n }\n throw new HttpError(response.status, message);\n }\n\n return await response.json();\n }\n\n async fetchTables(): Promise<ApiCmsTable[]> {\n try {\n const response = await this.get(``);\n return response.tables;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }\n\n private useDraftForTable(table: string) {\n if (Array.isArray(this.config.useDraft)) {\n return this.config.useDraft.includes(table);\n } else {\n return this.config.useDraft ?? false;\n }\n }\n\n async query(table: string, params: QueryParams = {}): Promise<ApiCmsRow[]> {\n try {\n const response = await this.get(`/tables/${table}/query`, {\n q: JSON.stringify(queryParamsToApi(params)),\n draft: Number(this.useDraftForTable(table) ?? params.useDraft),\n locale: this.config.locale,\n });\n return response.rows;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }\n\n async count(\n table: string,\n params: Pick<QueryParams, \"where\" | \"useDraft\"> = {}\n ): Promise<number> {\n try {\n const response = await this.get(`/tables/${table}/count`, {\n q: JSON.stringify(queryParamsToApi(params)),\n draft: Number(this.useDraftForTable(table) ?? params.useDraft),\n });\n return response.count;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }\n}\n\nexport function mkApi(config: DatabaseConfig | undefined) {\n if (!config) {\n throw new Error(\"Component must be wrapped in 'CMS Data Provider'.\");\n }\n\n return new API(config);\n}\n", "export const DEFAULT_HOST = \"https://data.plasmic.app\";\n", "import { ApiCmsTable, CmsType } from \"./schema\";\n\ntype ValueLabelPair = {\n value: string;\n label: string;\n};\n\nexport function mkTableOptions(\n tables: ApiCmsTable[] | undefined\n): ValueLabelPair[] {\n if (!tables) {\n return [];\n }\n\n return tables.map((table) => ({\n value: table.identifier,\n label: table.name,\n }));\n}\n\nexport function mkFieldOptions(\n tables: ApiCmsTable[] | undefined,\n tableIdentifier: string | undefined,\n types?: CmsType[]\n): ValueLabelPair[] {\n if (!tables) {\n return [];\n }\n\n const table = tables.find((t) => t.identifier === tableIdentifier);\n if (!table) {\n return [];\n }\n\n let fields = table.schema.fields;\n if (types) {\n fields = fields.filter((f) => types.includes(f.type));\n }\n const options = fields.map((f) => ({\n value: f.identifier,\n label: f.label || f.identifier,\n }));\n if (!options.some((option) => option.value === \"_id\")) {\n options.push({\n label: \"System ID\",\n value: \"_id\",\n });\n }\n\n return options;\n}\n", "// This should be kept in sync with wab/ApiSchema.\n\n// eslint-disable-next-line no-shadow\nexport enum CmsMetaType {\n TEXT = \"text\",\n LONG_TEXT = \"long-text\",\n NUMBER = \"number\",\n IMAGE = \"image\",\n FILE = \"file\",\n DATE_TIME = \"date-time\",\n BOOLEAN = \"boolean\",\n COLOR = \"color\",\n RICH_TEXT = \"rich-text\",\n REF = \"ref\",\n LIST = \"list\",\n OBJECT = \"object\",\n ENUM = \"enum\",\n}\n\nexport interface CmsBaseType<T> {\n /** The stable unique identifier, like `heroImage`. */\n identifier: string;\n /** The field label. */\n label?: string;\n helperText: string;\n required: boolean;\n hidden: boolean;\n localized: boolean;\n unique: boolean;\n /** The empty string \"\" locale is the default locale. */\n defaultValueByLocale: { [locale: string]: T };\n}\n\nexport interface CmsTextLike {\n defaultValue?: string;\n minChars?: number;\n maxChars?: number;\n}\n\nexport interface CmsText extends CmsBaseType<string>, CmsTextLike {\n type: CmsMetaType.TEXT;\n}\n\nexport interface CmsLongText extends CmsBaseType<string>, CmsTextLike {\n type: CmsMetaType.LONG_TEXT;\n}\n\nexport interface CmsNumber extends CmsBaseType<number> {\n type: CmsMetaType.NUMBER;\n defaultValue?: number;\n}\n\nexport interface CmsBoolean extends CmsBaseType<boolean> {\n type: CmsMetaType.BOOLEAN;\n defaultValue?: boolean;\n}\n\nexport interface CmsImage extends CmsBaseType<string> {\n type: CmsMetaType.IMAGE;\n defaultValue?: string;\n}\n\nexport interface CmsDateTime extends CmsBaseType<string> {\n type: CmsMetaType.DATE_TIME;\n defaultValue?: string;\n}\n\nexport interface CmsRichText extends CmsBaseType<string> {\n type: CmsMetaType.RICH_TEXT;\n defaultValue?: string;\n}\n\nexport interface CmsFile extends CmsBaseType<string> {\n type: CmsMetaType.FILE;\n defaultValue?: string;\n}\n\nexport interface CmsRef extends CmsBaseType<string> {\n type: CmsMetaType.REF;\n defaultValue?: string;\n}\n\nexport interface CmsList extends CmsBaseType<any[]> {\n type: CmsMetaType.LIST;\n fields: CmsFieldMeta[];\n}\n\nexport interface CmsObject extends CmsBaseType<object> {\n type: CmsMetaType.OBJECT;\n fields: CmsFieldMeta[];\n}\n\nexport interface CmsColor extends CmsBaseType<string> {\n type: CmsMetaType.COLOR;\n defaultValue?: string;\n}\n\nexport interface CmsEnum extends CmsBaseType<string> {\n type: CmsMetaType.ENUM;\n defaultValue?: string;\n options: string[];\n}\n\nexport type CmsFieldMeta =\n | CmsRef\n | CmsList\n | CmsObject\n | CmsText\n | CmsLongText\n | CmsNumber\n | CmsBoolean\n | CmsImage\n | CmsFile\n | CmsDateTime\n | CmsColor\n | CmsRichText\n | CmsEnum;\n\nexport type CmsType = CmsFieldMeta[\"type\"];\n\nexport interface CmsTableSchema {\n fields: CmsFieldMeta[];\n}\n\nexport interface ApiCmsTable {\n identifier: string;\n name: string;\n schema: CmsTableSchema;\n}\n\nexport interface ApiCmsRow {\n identifier: string | null;\n data: Record<string, any> | null;\n}\n\ntype FilterClause = any;\n\nexport interface ApiCmsQuery {\n where?: FilterClause;\n limit?: number;\n offset?: number;\n order?: (string | { field: string; dir: \"asc\" | \"desc\" })[];\n fields?: string[];\n}\n", "import type {\n Config,\n Field,\n FieldOrGroup,\n} from \"@react-awesome-query-builder/core\";\nimport type { RulesLogic } from \"json-logic-js\";\nimport { ApiCmsTable, CmsFieldMeta, CmsMetaType } from \"./schema\";\n\n/**\n * Maps Plasmic CMS table to react-awesome-query-builder config.\n *\n * The result will be handled by {@link rulesLogicToCmsWhere}.\n * Make sure it supports all operators defined here.\n */\nexport function cmsTableToQueryBuilderConfig(\n table: ApiCmsTable\n): Pick<Config, \"fields\"> {\n const qbFields: { [key: string]: FieldOrGroup } = {\n _id: {\n type: \"text\",\n label: \"System ID\",\n operators: [\"equal\", \"not_equal\"],\n },\n };\n for (const field of table.schema.fields) {\n const qbField = cmsFieldToQueryBuilderField(field);\n if (qbField) {\n qbFields[field.identifier] = qbField;\n }\n }\n return {\n fields: qbFields,\n };\n}\n\nfunction cmsFieldToQueryBuilderField(field: CmsFieldMeta): Field | undefined {\n const label = field.label || field.identifier;\n switch (field.type) {\n case CmsMetaType.TEXT:\n case CmsMetaType.LONG_TEXT:\n case CmsMetaType.REF: {\n return {\n type: \"text\",\n label,\n operators: [\"equal\", \"not_equal\", \"regex\"],\n };\n }\n case CmsMetaType.NUMBER: {\n return {\n type: \"number\",\n label,\n operators: [\n \"equal\",\n \"not_equal\",\n \"less\",\n \"less_or_equal\",\n \"greater\",\n \"greater_or_equal\",\n ],\n };\n }\n case CmsMetaType.BOOLEAN: {\n return {\n type: \"boolean\",\n label,\n };\n }\n case CmsMetaType.DATE_TIME: {\n return {\n type: \"datetime\",\n label,\n operators: [\n \"equal\",\n \"not_equal\",\n \"less\",\n \"less_or_equal\",\n \"greater\",\n \"greater_or_equal\",\n ],\n };\n }\n case CmsMetaType.ENUM: {\n return {\n type: \"select\",\n label,\n listValues: field.options,\n operators: [\"select_equals\", \"select_not_equals\", \"select_any_in\"],\n };\n }\n\n // Following types do not support filtering\n case CmsMetaType.COLOR:\n case CmsMetaType.FILE:\n case CmsMetaType.IMAGE:\n case CmsMetaType.LIST:\n case CmsMetaType.OBJECT:\n case CmsMetaType.RICH_TEXT:\n return;\n }\n}\n\n/**\n * Maps JsonLogic to Plasmic CMS API where query.\n *\n * See also:\n * - https://docs.plasmic.app/learn/plasmic-cms-api-reference/#filter-query\n * - makeSqlCondition in cms-util.ts\n */\nexport function rulesLogicToCmsWhere(logic: RulesLogic | undefined): any {\n if (logic === null || logic === undefined) {\n return undefined;\n } else if (typeof logic !== \"object\") {\n throw new Error(`unexpected logic: ${JSON.stringify(logic)}`);\n } else if (\"and\" in logic) {\n return {\n $and: logic[\"and\"].map(rulesLogicToCmsWhere),\n };\n } else if (\"or\" in logic) {\n return {\n $or: logic[\"or\"].map(rulesLogicToCmsWhere),\n };\n } else if (\"!\" in logic) {\n return {\n $not: rulesLogicToCmsWhere(logic[\"!\"]),\n };\n } else if (\"==\" in logic) {\n const [{ var: field }, operand] = logic[\"==\"] as [{ var: string }, unknown];\n return {\n [field]: operand,\n };\n } else if (\"!=\" in logic) {\n const [{ var: field }, operand] = logic[\"!=\"] as [{ var: string }, unknown];\n return {\n $not: { [field]: operand },\n };\n } else {\n // Map JsonLogic to Plasmic CMS where query:\n // JsonLogic: { \"<=\": [{ \"var\": \"age\" }, 18] }\n // CMS where: { \"$lt\": { \"age\": 18 } }\n const [key, value] = Object.entries(logic)[0];\n const apiOp: string | undefined = operatorMapping[key];\n if (apiOp) {\n const [{ var: field }, operand] = value as [{ var: string }, unknown];\n return { [field]: { [apiOp]: operand } };\n }\n\n throw new Error(`unexpected logic: ${JSON.stringify(logic)}`);\n }\n}\n\n/** Maps JsonLogic operator to Plasmic CMS operator. */\nconst operatorMapping: Record<string, string> = {\n \"<\": \"$lt\",\n \"<=\": \"$le\",\n \">\": \"$gt\",\n \">=\": \"$ge\",\n in: \"$in\",\n regex: \"$regex\",\n};\n"],
5
- "mappings": "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",
3
+ "sources": ["../src/index.ts", "../src/api.ts", "../src/constants.ts", "../src/schema.ts", "../src/util.ts", "../src/where.ts"],
4
+ "sourcesContent": ["import registerFunction, {\n CustomFunctionMeta,\n} from \"@plasmicapp/host/registerFunction\";\nimport type { RulesLogic } from \"json-logic-js\";\nimport { mkApi } from \"./api\";\nimport { DEFAULT_HOST } from \"./constants\";\nimport { ApiCmsTable } from \"./schema\";\nimport { mkFieldOptions } from \"./util\";\nimport { cmsTableToQueryBuilderConfig, rulesLogicToCmsWhere } from \"./where\";\n\nfunction getCmsHost() {\n return (globalThis as any)[\"__PLASMIC_CMS_HOST__\"] ?? DEFAULT_HOST;\n}\n\ninterface FnContext {\n tables: ApiCmsTable[];\n}\n\ninterface BaseCMSOpts {\n cmsId?: string;\n cmsPublicToken?: string;\n}\n\ninterface CMSTableOpts extends BaseCMSOpts {\n tableId?: string;\n}\n\nfunction sharedTableFnContext({ cmsId, cmsPublicToken }: BaseCMSOpts = {}): {\n dataKey: string;\n fetcher: () => Promise<FnContext>;\n} {\n if (!cmsId || !cmsPublicToken) {\n return {\n dataKey: \"\",\n fetcher: async () => ({ tables: [] }),\n };\n }\n return {\n dataKey: `cms_tables/${JSON.stringify({\n cmsId,\n cmsPublicToken,\n })}`,\n fetcher: async () => {\n const api = mkApi({\n databaseId: cmsId,\n databaseToken: cmsPublicToken,\n host: getCmsHost(),\n });\n const tables = await api.fetchTables();\n return { tables };\n },\n };\n}\n\nconst cmsIdParam = {\n type: \"string\",\n description: \"ID of the CMS.\",\n helpText:\n \"Find the CMS ID on the [Plasmic CMS settings page](https://docs.plasmic.app/learn/plasmic-cms-api-reference/#find-your-cms-ids-public-token-and-secret-token)\",\n} as const;\n\nconst cmsPublicTokenParam = {\n type: \"string\",\n description: \"Public token of the CMS.\",\n helpText:\n \"Find the public token on the [Plasmic CMS settings page](https://docs.plasmic.app/learn/plasmic-cms-api-reference/#find-your-cms-ids-public-token-and-secret-token)\",\n} as const;\n\nconst tableIdParam = {\n type: \"choice\",\n options: (_args: unknown, ctx: FnContext) => {\n if (!ctx?.tables) {\n return [];\n }\n return ctx.tables.map((table: { identifier: string; name: string }) => ({\n value: table.identifier,\n label: table.name,\n }));\n },\n} as const;\n\nconst selectParam = {\n type: \"choice\",\n multiSelect: true,\n description: \"Fields to fetch. Defaults to all fields.\",\n defaultValueHint: [\"Default: *\"] as string[],\n options: ([opts]: [(CMSTableOpts | undefined)?], ctx: FnContext) => {\n const tableId = opts?.tableId;\n return mkFieldOptions(ctx.tables, tableId, undefined, {\n includeRefStars: true,\n });\n },\n} as const;\n\nconst whereLogicParam = {\n type: \"queryBuilder\",\n description: \"Filter fetched entries. Defaults to fetch all entries.\",\n config: ([opts]: [(CMSTableOpts | undefined)?], ctx: FnContext) => {\n const tableId = opts?.tableId;\n const table = ctx.tables.find((t) => t.identifier === tableId);\n if (table) {\n return cmsTableToQueryBuilderConfig(table);\n } else {\n return { fields: {} };\n }\n },\n} as const;\n\nconst orderByParam = {\n type: \"choice\",\n description: \"Field to order entries by. Defaults to creation order.\",\n options: ([opts]: [(CMSTableOpts | undefined)?], ctx: FnContext) => {\n const tableId = opts?.tableId;\n return mkFieldOptions(ctx.tables, tableId, undefined, {\n includeRefStars: true,\n });\n },\n} as const;\n\nconst orderDirectionParam = {\n label: \"Direction\",\n type: \"choice\",\n options: [\n {\n value: \"asc\",\n label: \"Ascending\",\n },\n {\n value: \"desc\",\n label: \"Descending\",\n },\n ] as { value: \"asc\" | \"desc\"; label: string }[],\n defaultValueHint: \"Default: Ascending\",\n} as const;\n\nconst limitParam = {\n type: \"number\",\n description: \"Maximum number of entries to fetch.\",\n} as const;\n\nconst offsetParam = {\n type: \"number\",\n description: \"Number of entries to skip.\",\n defaultValueHint: 0,\n} as const;\n\nconst useDraftParam = {\n type: \"boolean\",\n description: \"Whether to use draft data.\",\n defaultValueHint: false,\n} as const;\n\nconst localeParam = {\n type: \"string\",\n description: \"The locale to use. Defaults to base locale.\",\n} as const;\n\nexport async function fetchTables({ cmsId, cmsPublicToken }: BaseCMSOpts) {\n if (!cmsId || !cmsPublicToken) {\n return [];\n }\n\n const api = mkApi({\n databaseId: cmsId,\n databaseToken: cmsPublicToken,\n host: getCmsHost(),\n });\n\n return api.fetchTables();\n}\n\ninterface FetchContentOpts extends CMSTableOpts {\n select?: string[];\n whereLogic?: RulesLogic;\n orderBy?: string;\n orderDirection?: \"asc\" | \"desc\";\n limit?: number;\n offset?: number;\n useDraft?: boolean;\n locale?: string;\n}\n\nexport async function fetchContent({\n cmsId,\n cmsPublicToken,\n tableId,\n select,\n whereLogic,\n orderBy,\n orderDirection,\n limit,\n offset,\n useDraft,\n locale,\n}: FetchContentOpts) {\n if (!cmsId || !cmsPublicToken || !tableId) {\n return [];\n }\n\n const api = mkApi({\n databaseId: cmsId,\n databaseToken: cmsPublicToken,\n host: getCmsHost(),\n useDraft,\n locale,\n });\n\n return api.query(tableId, {\n fields: select,\n where: rulesLogicToCmsWhere(whereLogic),\n orderBy,\n desc: orderDirection === \"desc\",\n limit,\n offset,\n });\n}\n\ninterface FetchCountOpts extends CMSTableOpts {\n whereLogic?: RulesLogic;\n useDraft?: boolean;\n}\n\nexport async function fetchCount({\n cmsId,\n cmsPublicToken,\n tableId,\n useDraft,\n whereLogic,\n}: FetchCountOpts) {\n if (!cmsId || !cmsPublicToken || !tableId) {\n return 0;\n }\n\n const api = mkApi({\n databaseId: cmsId,\n databaseToken: cmsPublicToken,\n host: getCmsHost(),\n useDraft,\n });\n\n return api.count(tableId, {\n where: rulesLogicToCmsWhere(whereLogic),\n });\n}\n\nexport function registerAllCmsFunctions(loader?: { registerFunction: any }) {\n function _registerFunction<T extends (...args: any[]) => any>(\n fn: T,\n meta: CustomFunctionMeta<T>\n ) {\n if (loader) {\n loader.registerFunction(fn, meta);\n } else {\n registerFunction(fn, meta);\n }\n }\n\n _registerFunction(fetchTables, {\n name: \"fetchTables\",\n namespace: \"plasmicCms\",\n displayName: \"Fetch Plasmic CMS Tables\",\n description: \"Fetches table metadata from Plasmic CMS\",\n importPath: \"@plasmicpkgs/cms\",\n params: [\n {\n type: \"object\",\n display: \"flatten\",\n name: \"Opts\",\n fields: {\n cmsId: cmsIdParam,\n cmsPublicToken: cmsPublicTokenParam,\n },\n },\n ],\n });\n\n _registerFunction(fetchContent, {\n name: \"fetchContent\",\n namespace: \"plasmicCms\",\n displayName: \"Fetch Plasmic CMS Content\",\n description: \"Fetch content from a Plasmic CMS table\",\n importPath: \"@plasmicpkgs/cms\",\n params: [\n {\n type: \"object\",\n display: \"flatten\",\n name: \"Opts\",\n fields: {\n cmsId: cmsIdParam,\n cmsPublicToken: cmsPublicTokenParam,\n tableId: tableIdParam,\n select: selectParam,\n whereLogic: whereLogicParam,\n orderBy: orderByParam,\n orderDirection: orderDirectionParam,\n limit: limitParam,\n offset: offsetParam,\n useDraft: useDraftParam,\n locale: localeParam,\n },\n },\n ],\n fnContext: sharedTableFnContext,\n });\n\n _registerFunction(fetchCount, {\n name: \"fetchCount\",\n namespace: \"plasmicCms\",\n displayName: \"Fetch Plasmic CMS Count\",\n description: \"Fetch the count of entries from a Plasmic CMS table\",\n importPath: \"@plasmicpkgs/cms\",\n params: [\n {\n type: \"object\",\n display: \"flatten\",\n name: \"Opts\",\n fields: {\n cmsId: cmsIdParam,\n cmsPublicToken: cmsPublicTokenParam,\n tableId: tableIdParam,\n whereLogic: whereLogicParam,\n useDraft: useDraftParam,\n },\n },\n ],\n fnContext: sharedTableFnContext,\n });\n}\n\n// Export utilities and types with underscore prefix\nexport { API as _API, HttpError as _HttpError, mkApi as _mkApi } from \"./api\";\n\nexport type {\n DatabaseConfig as _DatabaseConfig,\n QueryParams as _QueryParams,\n} from \"./api\";\n\nexport { DEFAULT_HOST as _DEFAULT_HOST } from \"./constants\";\n\nexport { CmsMetaType as _CmsMetaType } from \"./schema\";\nexport type {\n ApiCmsQuery as _ApiCmsQuery,\n ApiCmsRow as _ApiCmsRow,\n ApiCmsTable as _ApiCmsTable,\n} from \"./schema\";\n\nexport type {\n CmsBaseType as _CmsBaseType,\n CmsBoolean as _CmsBoolean,\n CmsDateTime as _CmsDateTime,\n CmsEnum as _CmsEnum,\n CmsFieldMeta as _CmsFieldMeta,\n CmsFile as _CmsFile,\n CmsImage as _CmsImage,\n CmsLongText as _CmsLongText,\n CmsNumber as _CmsNumber,\n CmsRef as _CmsRef,\n CmsRichText as _CmsRichText,\n CmsTableSchema as _CmsTableSchema,\n CmsText as _CmsText,\n CmsTextLike as _CmsTextLike,\n CmsType as _CmsType,\n} from \"./schema\";\n\nexport {\n mkFieldOptions as _mkFieldOptions,\n mkTableOptions as _mkTableOptions,\n} from \"./util\";\n", "import { ApiCmsQuery, ApiCmsRow, ApiCmsTable } from \"./schema\";\n\nexport interface DatabaseConfig {\n host: string;\n databaseId: string;\n databaseToken: string;\n locale?: string;\n useDraft?: boolean | string[];\n}\n\nexport interface QueryParams {\n useDraft?: boolean;\n where?: any;\n orderBy?: string;\n desc?: boolean;\n limit?: number;\n offset?: number;\n fields?: string[];\n}\n\nfunction queryParamsToApi(params: QueryParams): ApiCmsQuery {\n return {\n where: params.where,\n limit: params.limit,\n offset: params.offset,\n order: params.orderBy\n ? [\n {\n field: params.orderBy,\n dir: params.desc ? \"desc\" : \"asc\",\n },\n ]\n : undefined,\n fields: params.fields,\n };\n}\n\nexport class HttpError extends Error {\n constructor(public status: number, message: string) {\n super(message);\n }\n}\n\nexport class API {\n constructor(private config: DatabaseConfig) {}\n\n async get(endpoint: string, params: any = {}) {\n const url = new URL(\n `${this.config.host}/api/v1/cms/databases/${this.config.databaseId}${endpoint}`\n );\n const fixedParams = Object.keys(params).reduce((newObj, key) => {\n const value = params[key];\n if (value != null) {\n newObj[key] = value;\n }\n return newObj;\n }, {} as any);\n url.search = new URLSearchParams(fixedParams).toString();\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: {\n accept: \"*/*\",\n \"x-plasmic-api-cms-tokens\": `${this.config.databaseId}:${this.config.databaseToken}`,\n },\n mode: \"cors\",\n });\n\n if (response.status !== 200) {\n let message = await response.text();\n try {\n const json = JSON.parse(message);\n if (json.error?.message) {\n message = json.error.message;\n }\n } catch {\n // ignored\n }\n throw new HttpError(response.status, message);\n }\n\n return await response.json();\n }\n\n async fetchTables(): Promise<ApiCmsTable[]> {\n try {\n const response = await this.get(``);\n return response.tables;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }\n\n private useDraftForTable(table: string) {\n if (Array.isArray(this.config.useDraft)) {\n return this.config.useDraft.includes(table);\n } else {\n return this.config.useDraft ?? false;\n }\n }\n\n async query(table: string, params: QueryParams = {}): Promise<ApiCmsRow[]> {\n try {\n const response = await this.get(`/tables/${table}/query`, {\n q: JSON.stringify(queryParamsToApi(params)),\n draft: Number(this.useDraftForTable(table) ?? params.useDraft),\n locale: this.config.locale,\n });\n return response.rows;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }\n\n async count(\n table: string,\n params: Pick<QueryParams, \"where\" | \"useDraft\"> = {}\n ): Promise<number> {\n try {\n const response = await this.get(`/tables/${table}/count`, {\n q: JSON.stringify(queryParamsToApi(params)),\n draft: Number(this.useDraftForTable(table) ?? params.useDraft),\n });\n return response.count;\n } catch (e) {\n console.error(e);\n throw e;\n }\n }\n}\n\nexport function mkApi(config: DatabaseConfig | undefined) {\n if (!config) {\n throw new Error(\"Component must be wrapped in 'CMS Data Provider'.\");\n }\n\n return new API(config);\n}\n", "export const DEFAULT_HOST = \"https://data.plasmic.app\";\n", "// This should be kept in sync with wab/ApiSchema.\n\n// eslint-disable-next-line no-shadow\nexport enum CmsMetaType {\n TEXT = \"text\",\n LONG_TEXT = \"long-text\",\n NUMBER = \"number\",\n IMAGE = \"image\",\n FILE = \"file\",\n DATE_TIME = \"date-time\",\n BOOLEAN = \"boolean\",\n COLOR = \"color\",\n RICH_TEXT = \"rich-text\",\n REF = \"ref\",\n LIST = \"list\",\n OBJECT = \"object\",\n ENUM = \"enum\",\n}\n\nexport interface CmsBaseType<T> {\n /** The stable unique identifier, like `heroImage`. */\n identifier: string;\n /** The field label. */\n label?: string;\n helperText: string;\n required: boolean;\n hidden: boolean;\n localized: boolean;\n unique: boolean;\n /** The empty string \"\" locale is the default locale. */\n defaultValueByLocale: { [locale: string]: T };\n}\n\nexport interface CmsTextLike {\n defaultValue?: string;\n minChars?: number;\n maxChars?: number;\n}\n\nexport interface CmsText extends CmsBaseType<string>, CmsTextLike {\n type: CmsMetaType.TEXT;\n}\n\nexport interface CmsLongText extends CmsBaseType<string>, CmsTextLike {\n type: CmsMetaType.LONG_TEXT;\n}\n\nexport interface CmsNumber extends CmsBaseType<number> {\n type: CmsMetaType.NUMBER;\n defaultValue?: number;\n}\n\nexport interface CmsBoolean extends CmsBaseType<boolean> {\n type: CmsMetaType.BOOLEAN;\n defaultValue?: boolean;\n}\n\nexport interface CmsImage extends CmsBaseType<string> {\n type: CmsMetaType.IMAGE;\n defaultValue?: string;\n}\n\nexport interface CmsDateTime extends CmsBaseType<string> {\n type: CmsMetaType.DATE_TIME;\n defaultValue?: string;\n}\n\nexport interface CmsRichText extends CmsBaseType<string> {\n type: CmsMetaType.RICH_TEXT;\n defaultValue?: string;\n}\n\nexport interface CmsFile extends CmsBaseType<string> {\n type: CmsMetaType.FILE;\n defaultValue?: string;\n}\n\nexport interface CmsRef extends CmsBaseType<string> {\n type: CmsMetaType.REF;\n defaultValue?: string;\n}\n\nexport interface CmsList extends CmsBaseType<any[]> {\n type: CmsMetaType.LIST;\n fields: CmsFieldMeta[];\n}\n\nexport interface CmsObject extends CmsBaseType<object> {\n type: CmsMetaType.OBJECT;\n fields: CmsFieldMeta[];\n}\n\nexport interface CmsColor extends CmsBaseType<string> {\n type: CmsMetaType.COLOR;\n defaultValue?: string;\n}\n\nexport interface CmsEnum extends CmsBaseType<string> {\n type: CmsMetaType.ENUM;\n defaultValue?: string;\n options: string[];\n}\n\nexport type CmsFieldMeta =\n | CmsRef\n | CmsList\n | CmsObject\n | CmsText\n | CmsLongText\n | CmsNumber\n | CmsBoolean\n | CmsImage\n | CmsFile\n | CmsDateTime\n | CmsColor\n | CmsRichText\n | CmsEnum;\n\nexport type CmsType = CmsFieldMeta[\"type\"];\n\nexport interface CmsTableSchema {\n fields: CmsFieldMeta[];\n}\n\nexport interface ApiCmsTable {\n identifier: string;\n name: string;\n schema: CmsTableSchema;\n}\n\nexport interface ApiCmsRow {\n identifier: string | null;\n data: Record<string, any> | null;\n}\n\ntype FilterClause = any;\n\nexport interface ApiCmsQuery {\n where?: FilterClause;\n limit?: number;\n offset?: number;\n order?: (string | { field: string; dir: \"asc\" | \"desc\" })[];\n fields?: string[];\n}\n", "import {\n ApiCmsTable,\n CmsFieldMeta,\n CmsList,\n CmsMetaType,\n CmsObject,\n CmsType,\n} from \"./schema\";\n\ntype ValueLabelPair = {\n value: string;\n label: string;\n};\n\nexport function mkTableOptions(\n tables: ApiCmsTable[] | undefined\n): ValueLabelPair[] {\n if (!tables) {\n return [];\n }\n\n return tables.map((table) => ({\n value: table.identifier,\n label: table.name,\n }));\n}\n\nexport function mkFieldOptions(\n tables: ApiCmsTable[] | undefined,\n tableIdentifier: string | undefined,\n types?: CmsType[],\n opts?: {\n includeSystemId?: boolean;\n includeRefStars?: boolean;\n }\n): ValueLabelPair[] {\n if (!tables) {\n return [];\n }\n\n const table = tables.find((t) => t.identifier === tableIdentifier);\n if (!table) {\n return [];\n }\n\n let fields = table.schema.fields;\n if (types) {\n fields = fields.filter((f) => types.includes(f.type));\n }\n\n const options = [\n // single fields\n ...fields.map((f) => ({\n value: f.identifier,\n label: f.label || f.identifier,\n })),\n\n // ref star fields\n ...(opts?.includeRefStars ? mkRefStarFieldOptions([], fields) : []),\n ];\n\n options.sort((a, b) => a.label.localeCompare(b.label));\n\n if (\n opts?.includeSystemId &&\n !options.some((option) => option.value === \"_id\")\n ) {\n options.push({\n label: \"System ID\",\n value: \"_id\",\n });\n }\n\n return options;\n}\n\nfunction mkRefStarFieldOptions(\n fieldPath: (CmsList | CmsObject)[],\n nextFields: CmsFieldMeta[]\n): ValueLabelPair[] {\n return nextFields.flatMap((nestedField) => {\n if (nestedField.type === CmsMetaType.REF) {\n const fieldPathToRef = [...fieldPath, nestedField];\n return [\n {\n value: fieldPathToRef.map((f) => f.identifier).join(\".\") + \".*\",\n label:\n fieldPathToRef.map((f) => f.label || f.identifier).join(\".\") + \".*\",\n },\n ];\n } else if (\n nestedField.type === CmsMetaType.LIST ||\n nestedField.type === CmsMetaType.OBJECT\n ) {\n return mkRefStarFieldOptions(\n [...fieldPath, nestedField],\n nestedField.fields\n );\n } else {\n return [];\n }\n });\n}\n", "import type {\n Config,\n Field,\n FieldOrGroup,\n} from \"@react-awesome-query-builder/core\";\nimport type { RulesLogic } from \"json-logic-js\";\nimport { ApiCmsTable, CmsFieldMeta, CmsMetaType } from \"./schema\";\n\n/**\n * Maps Plasmic CMS table to react-awesome-query-builder config.\n *\n * The result will be handled by {@link rulesLogicToCmsWhere}.\n * Make sure it supports all operators defined here.\n */\nexport function cmsTableToQueryBuilderConfig(\n table: ApiCmsTable\n): Pick<Config, \"fields\"> {\n const qbFields: { [key: string]: FieldOrGroup } = {\n _id: {\n type: \"text\",\n label: \"System ID\",\n operators: [\"equal\", \"not_equal\"],\n },\n };\n for (const field of table.schema.fields) {\n const qbField = cmsFieldToQueryBuilderField(field);\n if (qbField) {\n qbFields[field.identifier] = qbField;\n }\n }\n return {\n fields: qbFields,\n };\n}\n\nfunction cmsFieldToQueryBuilderField(field: CmsFieldMeta): Field | undefined {\n const label = field.label || field.identifier;\n switch (field.type) {\n case CmsMetaType.TEXT:\n case CmsMetaType.LONG_TEXT:\n case CmsMetaType.REF: {\n return {\n type: \"text\",\n label,\n operators: [\"equal\", \"not_equal\", \"regex\"],\n };\n }\n case CmsMetaType.NUMBER: {\n return {\n type: \"number\",\n label,\n operators: [\n \"equal\",\n \"not_equal\",\n \"less\",\n \"less_or_equal\",\n \"greater\",\n \"greater_or_equal\",\n ],\n };\n }\n case CmsMetaType.BOOLEAN: {\n return {\n type: \"boolean\",\n label,\n };\n }\n case CmsMetaType.DATE_TIME: {\n return {\n type: \"datetime\",\n label,\n operators: [\n \"equal\",\n \"not_equal\",\n \"less\",\n \"less_or_equal\",\n \"greater\",\n \"greater_or_equal\",\n ],\n };\n }\n case CmsMetaType.ENUM: {\n return {\n type: \"select\",\n label,\n listValues: field.options,\n operators: [\"select_equals\", \"select_not_equals\", \"select_any_in\"],\n };\n }\n\n // Following types do not support filtering\n case CmsMetaType.COLOR:\n case CmsMetaType.FILE:\n case CmsMetaType.IMAGE:\n case CmsMetaType.LIST:\n case CmsMetaType.OBJECT:\n case CmsMetaType.RICH_TEXT:\n return;\n }\n}\n\n/**\n * Maps JsonLogic to Plasmic CMS API where query.\n *\n * See also:\n * - https://docs.plasmic.app/learn/plasmic-cms-api-reference/#filter-query\n * - makeSqlCondition in cms-util.ts\n */\nexport function rulesLogicToCmsWhere(logic: RulesLogic | undefined): any {\n if (logic === null || logic === undefined) {\n return undefined;\n } else if (typeof logic !== \"object\") {\n throw new Error(`unexpected logic: ${JSON.stringify(logic)}`);\n } else if (\"and\" in logic) {\n return {\n $and: logic[\"and\"].map(rulesLogicToCmsWhere),\n };\n } else if (\"or\" in logic) {\n return {\n $or: logic[\"or\"].map(rulesLogicToCmsWhere),\n };\n } else if (\"!\" in logic) {\n return {\n $not: rulesLogicToCmsWhere(logic[\"!\"]),\n };\n } else if (\"==\" in logic) {\n const [{ var: field }, operand] = logic[\"==\"] as [{ var: string }, unknown];\n return {\n [field]: operand,\n };\n } else if (\"!=\" in logic) {\n const [{ var: field }, operand] = logic[\"!=\"] as [{ var: string }, unknown];\n return {\n $not: { [field]: operand },\n };\n } else {\n // Map JsonLogic to Plasmic CMS where query:\n // JsonLogic: { \"<=\": [{ \"var\": \"age\" }, 18] }\n // CMS where: { \"$lt\": { \"age\": 18 } }\n const [key, value] = Object.entries(logic)[0];\n const apiOp: string | undefined = operatorMapping[key];\n if (apiOp) {\n const [{ var: field }, operand] = value as [{ var: string }, unknown];\n return { [field]: { [apiOp]: operand } };\n }\n\n throw new Error(`unexpected logic: ${JSON.stringify(logic)}`);\n }\n}\n\n/** Maps JsonLogic operator to Plasmic CMS operator. */\nconst operatorMapping: Record<string, string> = {\n \"<\": \"$lt\",\n \"<=\": \"$le\",\n \">\": \"$gt\",\n \">=\": \"$ge\",\n in: \"$in\",\n regex: \"$regex\",\n};\n"],
5
+ "mappings": "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",
6
6
  "names": ["CmsMetaType", "registerFunction"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plasmicpkgs/cms",
3
- "version": "0.0.7",
3
+ "version": "0.0.9",
4
4
  "description": "Plasmic CMS custom functions",
5
5
  "repository": {
6
6
  "type": "git",
@@ -32,7 +32,7 @@
32
32
  "postpublish": "bash ../../scripts/publish-api-doc-model.sh"
33
33
  },
34
34
  "devDependencies": {
35
- "@plasmicapp/host": "1.0.231",
35
+ "@plasmicapp/host": "1.0.232",
36
36
  "@react-awesome-query-builder/core": "^6.0.0",
37
37
  "@types/json-logic-js": "^2.0.0",
38
38
  "@types/node": "^17.0.14"
@@ -40,5 +40,5 @@
40
40
  "peerDependencies": {
41
41
  "@plasmicapp/host": "^1.0.211"
42
42
  },
43
- "gitHead": "6b9428c7b4f35d9b84241981523e746e18e2abb7"
43
+ "gitHead": "b6552bed8840c583a74ba7e1c724fa2850c6c2ed"
44
44
  }