@plasmicpkgs/cms 0.0.4 → 0.0.6

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
@@ -1,5 +1,5 @@
1
1
  import { ApiCmsRow } from './schema';
2
- import { ApiCmsTable } from './schema';
2
+ import type { RulesLogic } from 'json-logic-js';
3
3
 
4
4
  export declare class _API {
5
5
  private config;
@@ -33,43 +33,61 @@ export declare interface _ApiCmsTable {
33
33
  schema: _CmsTableSchema;
34
34
  }
35
35
 
36
- export declare interface _CmsBaseType {
36
+ export declare interface _CmsBaseType<T> {
37
+ /** The stable unique identifier, like `heroImage`. */
37
38
  identifier: string;
38
- name: string;
39
+ /** The field label. */
40
+ label?: string;
39
41
  helperText: string;
40
42
  required: boolean;
41
43
  hidden: boolean;
44
+ localized: boolean;
45
+ unique: boolean;
46
+ /** The empty string "" locale is the default locale. */
47
+ defaultValueByLocale: {
48
+ [locale: string]: T;
49
+ };
42
50
  }
43
51
 
44
- export declare interface _CmsBoolean extends _CmsBaseType {
52
+ export declare interface _CmsBoolean extends _CmsBaseType<boolean> {
45
53
  type: _CmsMetaType.BOOLEAN;
46
54
  defaultValue?: boolean;
47
55
  }
48
56
 
49
- export declare interface _CmsDateTime extends _CmsBaseType {
57
+ declare interface CmsColor extends _CmsBaseType<string> {
58
+ type: _CmsMetaType.COLOR;
59
+ defaultValue?: string;
60
+ }
61
+
62
+ export declare interface _CmsDateTime extends _CmsBaseType<string> {
50
63
  type: _CmsMetaType.DATE_TIME;
51
64
  defaultValue?: string;
52
65
  }
53
66
 
54
- export declare interface _CmsEnum extends _CmsBaseType {
67
+ export declare interface _CmsEnum extends _CmsBaseType<string> {
55
68
  type: _CmsMetaType.ENUM;
56
69
  defaultValue?: string;
57
70
  options: string[];
58
71
  }
59
72
 
60
- export declare type _CmsFieldMeta = _CmsText | _CmsLongText | _CmsNumber | _CmsBoolean | _CmsImage | _CmsFile | _CmsDateTime | _CmsRef | _CmsRichText | _CmsEnum;
73
+ export declare type _CmsFieldMeta = _CmsRef | CmsList | CmsObject | _CmsText | _CmsLongText | _CmsNumber | _CmsBoolean | _CmsImage | _CmsFile | _CmsDateTime | CmsColor | _CmsRichText | _CmsEnum;
61
74
 
62
- export declare interface _CmsFile extends _CmsBaseType {
75
+ export declare interface _CmsFile extends _CmsBaseType<string> {
63
76
  type: _CmsMetaType.FILE;
64
77
  defaultValue?: string;
65
78
  }
66
79
 
67
- export declare interface _CmsImage extends _CmsBaseType {
80
+ export declare interface _CmsImage extends _CmsBaseType<string> {
68
81
  type: _CmsMetaType.IMAGE;
69
82
  defaultValue?: string;
70
83
  }
71
84
 
72
- export declare interface _CmsLongText extends _CmsBaseType, _CmsTextLike {
85
+ declare interface CmsList extends _CmsBaseType<any[]> {
86
+ type: _CmsMetaType.LIST;
87
+ fields: _CmsFieldMeta[];
88
+ }
89
+
90
+ export declare interface _CmsLongText extends _CmsBaseType<string>, _CmsTextLike {
73
91
  type: _CmsMetaType.LONG_TEXT;
74
92
  }
75
93
 
@@ -89,17 +107,22 @@ export declare enum _CmsMetaType {
89
107
  ENUM = "enum"
90
108
  }
91
109
 
92
- export declare interface _CmsNumber extends _CmsBaseType {
110
+ export declare interface _CmsNumber extends _CmsBaseType<number> {
93
111
  type: _CmsMetaType.NUMBER;
94
112
  defaultValue?: number;
95
113
  }
96
114
 
97
- export declare interface _CmsRef extends _CmsBaseType {
115
+ declare interface CmsObject extends _CmsBaseType<object> {
116
+ type: _CmsMetaType.OBJECT;
117
+ fields: _CmsFieldMeta[];
118
+ }
119
+
120
+ export declare interface _CmsRef extends _CmsBaseType<string> {
98
121
  type: _CmsMetaType.REF;
99
122
  defaultValue?: string;
100
123
  }
101
124
 
102
- export declare interface _CmsRichText extends _CmsBaseType {
125
+ export declare interface _CmsRichText extends _CmsBaseType<string> {
103
126
  type: _CmsMetaType.RICH_TEXT;
104
127
  defaultValue?: string;
105
128
  }
@@ -108,7 +131,7 @@ export declare interface _CmsTableSchema {
108
131
  fields: _CmsFieldMeta[];
109
132
  }
110
133
 
111
- export declare interface _CmsText extends _CmsBaseType, _CmsTextLike {
134
+ export declare interface _CmsText extends _CmsBaseType<string>, _CmsTextLike {
112
135
  type: _CmsMetaType.TEXT;
113
136
  }
114
137
 
@@ -130,11 +153,11 @@ export declare interface _DatabaseConfig {
130
153
 
131
154
  export declare const _DEFAULT_HOST = "https://data.plasmic.app";
132
155
 
133
- export declare function fetchContent(cmsId: string, cmsPublicToken: string, tableId: string, params: _QueryParams, useDraft: boolean, locale: string): Promise<ApiCmsRow[]>;
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[]>;
134
157
 
135
- export declare function fetchCount(cmsId: string, cmsPublicToken: string, tableId: string, params: _QueryParams, useDraft: boolean): Promise<number>;
158
+ export declare function fetchCount(cmsId?: string, cmsPublicToken?: string, tableId?: string, whereLogic?: RulesLogic, useDraft?: boolean): Promise<number>;
136
159
 
137
- export declare function fetchTables(cmsId: string, cmsPublicToken: string): Promise<ApiCmsTable[]>;
160
+ export declare function fetchTables(cmsId: string, cmsPublicToken: string): Promise<_ApiCmsTable[]>;
138
161
 
139
162
  declare type FilterClause = any;
140
163
 
package/dist/index.esm.js CHANGED
@@ -104,10 +104,11 @@ var API = class {
104
104
  }
105
105
  query(_0) {
106
106
  return __async(this, arguments, function* (table, params = {}) {
107
+ var _a;
107
108
  try {
108
109
  const response = yield this.get(`/tables/${table}/query`, {
109
110
  q: JSON.stringify(queryParamsToApi(params)),
110
- draft: Number(this.useDraftForTable(table) || params.useDraft),
111
+ draft: Number((_a = this.useDraftForTable(table)) != null ? _a : params.useDraft),
111
112
  locale: this.config.locale
112
113
  });
113
114
  return response.rows;
@@ -119,10 +120,11 @@ var API = class {
119
120
  }
120
121
  count(_0) {
121
122
  return __async(this, arguments, function* (table, params = {}) {
123
+ var _a;
122
124
  try {
123
125
  const response = yield this.get(`/tables/${table}/count`, {
124
126
  q: JSON.stringify(queryParamsToApi(params)),
125
- draft: Number(this.useDraftForTable(table) || params.useDraft)
127
+ draft: Number((_a = this.useDraftForTable(table)) != null ? _a : params.useDraft)
126
128
  });
127
129
  return response.count;
128
130
  } catch (e) {
@@ -142,24 +144,6 @@ function mkApi(config) {
142
144
  // src/constants.ts
143
145
  var DEFAULT_HOST = "https://data.plasmic.app";
144
146
 
145
- // src/schema.ts
146
- var CmsMetaType = /* @__PURE__ */ ((CmsMetaType2) => {
147
- CmsMetaType2["TEXT"] = "text";
148
- CmsMetaType2["LONG_TEXT"] = "long-text";
149
- CmsMetaType2["NUMBER"] = "number";
150
- CmsMetaType2["IMAGE"] = "image";
151
- CmsMetaType2["FILE"] = "file";
152
- CmsMetaType2["DATE_TIME"] = "date-time";
153
- CmsMetaType2["BOOLEAN"] = "boolean";
154
- CmsMetaType2["COLOR"] = "color";
155
- CmsMetaType2["RICH_TEXT"] = "rich-text";
156
- CmsMetaType2["REF"] = "ref";
157
- CmsMetaType2["LIST"] = "list";
158
- CmsMetaType2["OBJECT"] = "object";
159
- CmsMetaType2["ENUM"] = "enum";
160
- return CmsMetaType2;
161
- })(CmsMetaType || {});
162
-
163
147
  // src/util.ts
164
148
  function mkTableOptions(tables) {
165
149
  if (!tables) {
@@ -184,36 +168,173 @@ function mkFieldOptions(tables, tableIdentifier, types) {
184
168
  }
185
169
  const options = fields.map((f) => ({
186
170
  value: f.identifier,
187
- label: f.name || f.identifier
171
+ label: f.label || f.identifier
188
172
  }));
189
173
  if (!options.some((option) => option.value === "_id")) {
190
174
  options.push({
191
- label: "System-assigned ID",
175
+ label: "System ID",
192
176
  value: "_id"
193
177
  });
194
178
  }
195
179
  return options;
196
180
  }
197
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 || {});
199
+
200
+ // src/where.ts
201
+ function cmsTableToQueryBuilderConfig(table) {
202
+ const qbFields = {
203
+ _id: {
204
+ type: "text",
205
+ label: "System ID",
206
+ operators: ["equal", "not_equal"]
207
+ }
208
+ };
209
+ for (const field of table.schema.fields) {
210
+ const qbField = cmsFieldToQueryBuilderField(field);
211
+ if (qbField) {
212
+ qbFields[field.identifier] = qbField;
213
+ }
214
+ }
215
+ return {
216
+ fields: qbFields
217
+ };
218
+ }
219
+ function cmsFieldToQueryBuilderField(field) {
220
+ const label = field.label || field.identifier;
221
+ switch (field.type) {
222
+ case "text" /* TEXT */:
223
+ case "long-text" /* LONG_TEXT */:
224
+ case "ref" /* REF */: {
225
+ return {
226
+ type: "text",
227
+ label,
228
+ operators: ["equal", "not_equal", "regex"]
229
+ };
230
+ }
231
+ case "number" /* NUMBER */: {
232
+ return {
233
+ type: "number",
234
+ label,
235
+ operators: [
236
+ "equal",
237
+ "not_equal",
238
+ "less",
239
+ "less_or_equal",
240
+ "greater",
241
+ "greater_or_equal"
242
+ ]
243
+ };
244
+ }
245
+ case "boolean" /* BOOLEAN */: {
246
+ return {
247
+ type: "boolean",
248
+ label
249
+ };
250
+ }
251
+ case "date-time" /* DATE_TIME */: {
252
+ return {
253
+ type: "datetime",
254
+ label,
255
+ operators: [
256
+ "equal",
257
+ "not_equal",
258
+ "less",
259
+ "less_or_equal",
260
+ "greater",
261
+ "greater_or_equal"
262
+ ]
263
+ };
264
+ }
265
+ case "enum" /* ENUM */: {
266
+ return {
267
+ type: "select",
268
+ label,
269
+ listValues: field.options,
270
+ operators: ["select_equals", "select_not_equals", "select_any_in"]
271
+ };
272
+ }
273
+ case "color" /* COLOR */:
274
+ case "file" /* FILE */:
275
+ case "image" /* IMAGE */:
276
+ case "list" /* LIST */:
277
+ case "object" /* OBJECT */:
278
+ case "rich-text" /* RICH_TEXT */:
279
+ return;
280
+ }
281
+ }
282
+ function rulesLogicToCmsWhere(logic) {
283
+ if (logic === null || logic === void 0) {
284
+ return void 0;
285
+ } else if (typeof logic !== "object") {
286
+ throw new Error(`unexpected logic: ${JSON.stringify(logic)}`);
287
+ } else if ("and" in logic) {
288
+ return {
289
+ $and: logic["and"].map(rulesLogicToCmsWhere)
290
+ };
291
+ } else if ("or" in logic) {
292
+ return {
293
+ $or: logic["or"].map(rulesLogicToCmsWhere)
294
+ };
295
+ } else if ("!" in logic) {
296
+ return {
297
+ $not: rulesLogicToCmsWhere(logic["!"])
298
+ };
299
+ } else if ("==" in logic) {
300
+ const [{ var: field }, operand] = logic["=="];
301
+ return {
302
+ [field]: operand
303
+ };
304
+ } else if ("!=" in logic) {
305
+ const [{ var: field }, operand] = logic["!="];
306
+ return {
307
+ $not: { [field]: operand }
308
+ };
309
+ } else {
310
+ const [key, value] = Object.entries(logic)[0];
311
+ const apiOp = operatorMapping[key];
312
+ if (apiOp) {
313
+ const [{ var: field }, operand] = value;
314
+ return { [field]: { [apiOp]: operand } };
315
+ }
316
+ throw new Error(`unexpected logic: ${JSON.stringify(logic)}`);
317
+ }
318
+ }
319
+ var operatorMapping = {
320
+ "<": "$lt",
321
+ "<=": "$le",
322
+ ">": "$gt",
323
+ ">=": "$ge",
324
+ in: "$in",
325
+ regex: "$regex"
326
+ };
327
+
198
328
  // src/index.ts
199
329
  function getCmsHost() {
200
330
  var _a;
201
331
  return (_a = globalThis["__PLASMIC_CMS_HOST__"]) != null ? _a : DEFAULT_HOST;
202
332
  }
203
- function createTableOptions(_args, ctx) {
204
- if (!(ctx == null ? void 0 : ctx.tables)) {
205
- return [];
206
- }
207
- return ctx.tables.map((table) => ({
208
- value: table.identifier,
209
- label: table.name
210
- }));
211
- }
212
- var sharedTableFnContext = (cmsId, cmsPublicToken, ..._args) => {
333
+ function sharedTableFnContext(cmsId, cmsPublicToken, ..._args) {
213
334
  if (!cmsId || !cmsPublicToken) {
214
335
  return {
215
336
  dataKey: "",
216
- fetcher: () => __async(void 0, null, function* () {
337
+ fetcher: () => __async(this, null, function* () {
217
338
  return { tables: [] };
218
339
  })
219
340
  };
@@ -223,7 +344,7 @@ var sharedTableFnContext = (cmsId, cmsPublicToken, ..._args) => {
223
344
  cmsId,
224
345
  cmsPublicToken
225
346
  })}`,
226
- fetcher: () => __async(void 0, null, function* () {
347
+ fetcher: () => __async(this, null, function* () {
227
348
  const api = mkApi({
228
349
  databaseId: cmsId,
229
350
  databaseToken: cmsPublicToken,
@@ -233,36 +354,101 @@ var sharedTableFnContext = (cmsId, cmsPublicToken, ..._args) => {
233
354
  return { tables };
234
355
  })
235
356
  };
236
- };
357
+ }
237
358
  var cmsIdParam = {
238
359
  name: "cmsId",
239
360
  type: "string",
240
- description: "The cms ID"
361
+ description: "Find the CMS ID on the Plasmic CMS settings page."
241
362
  };
242
363
  var cmsPublicTokenParam = {
243
364
  name: "cmsPublicToken",
244
365
  type: "string",
245
- description: "The cms public token"
366
+ description: "Find the Public Token on the Plasmic CMS settings page."
246
367
  };
247
368
  var tableIdParam = {
248
369
  name: "tableId",
249
370
  type: "choice",
250
- options: createTableOptions
371
+ options: (_args, ctx) => {
372
+ if (!(ctx == null ? void 0 : ctx.tables)) {
373
+ return [];
374
+ }
375
+ return ctx.tables.map((table) => ({
376
+ value: table.identifier,
377
+ label: table.name
378
+ }));
379
+ }
380
+ };
381
+ var selectParam = {
382
+ name: "select",
383
+ type: "choice",
384
+ multiSelect: true,
385
+ description: "Fields to fetch. Defaults to all fields.",
386
+ defaultValueHint: ["Default: *"],
387
+ options: (args, ctx) => {
388
+ const tableId = args[2];
389
+ return mkFieldOptions(ctx.tables, tableId);
390
+ }
251
391
  };
252
- var paramsParam = {
253
- name: "params",
254
- type: "object",
255
- description: "The parameters to filter the content (e.g., for sorting, limit, offset, advanced queries)"
392
+ var whereLogicParam = {
393
+ name: "where",
394
+ type: "queryBuilder",
395
+ description: "Filter fetched entries. Defaults to fetch all entries.",
396
+ config: (args, ctx) => {
397
+ const tableId = args[2];
398
+ const table = ctx.tables.find((t) => t.identifier === tableId);
399
+ if (table) {
400
+ return cmsTableToQueryBuilderConfig(table);
401
+ } else {
402
+ return { fields: {} };
403
+ }
404
+ }
405
+ };
406
+ var orderByParam = {
407
+ name: "orderBy",
408
+ type: "choice",
409
+ 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);
413
+ }
414
+ };
415
+ var orderDirectionParam = {
416
+ name: "orderDirection",
417
+ label: "Direction",
418
+ type: "choice",
419
+ options: [
420
+ {
421
+ value: "asc",
422
+ label: "Ascending"
423
+ },
424
+ {
425
+ value: "desc",
426
+ label: "Descending"
427
+ }
428
+ ],
429
+ defaultValueHint: "Default: Ascending"
430
+ };
431
+ var limitParam = {
432
+ name: "limit",
433
+ type: "number",
434
+ description: "Maximum number of entries to fetch."
435
+ };
436
+ var offsetParam = {
437
+ name: "offset",
438
+ type: "number",
439
+ description: "Number of entries to skip.",
440
+ defaultValueHint: 0
256
441
  };
257
442
  var useDraftParam = {
258
443
  name: "useDraft",
259
444
  type: "boolean",
260
- description: "Whether to use draft data. Defaults to false."
445
+ description: "Whether to use draft data.",
446
+ defaultValueHint: false
261
447
  };
262
448
  var localeParam = {
263
449
  name: "locale",
264
450
  type: "string",
265
- description: "The locale to use. Defaults to empty string."
451
+ description: "The locale to use. Defaults to base locale."
266
452
  };
267
453
  function fetchTables(cmsId, cmsPublicToken) {
268
454
  return __async(this, null, function* () {
@@ -274,8 +460,11 @@ function fetchTables(cmsId, cmsPublicToken) {
274
460
  return api.fetchTables();
275
461
  });
276
462
  }
277
- function fetchContent(cmsId, cmsPublicToken, tableId, params, useDraft, locale) {
463
+ function fetchContent(cmsId, cmsPublicToken, tableId, select, whereLogic, orderBy, orderDirection, limit, offset, useDraft, locale) {
278
464
  return __async(this, null, function* () {
465
+ if (!cmsId || !cmsPublicToken || !tableId) {
466
+ return [];
467
+ }
279
468
  const api = mkApi({
280
469
  databaseId: cmsId,
281
470
  databaseToken: cmsPublicToken,
@@ -283,18 +472,30 @@ function fetchContent(cmsId, cmsPublicToken, tableId, params, useDraft, locale)
283
472
  useDraft,
284
473
  locale
285
474
  });
286
- return api.query(tableId, params);
475
+ return api.query(tableId, {
476
+ fields: select,
477
+ where: rulesLogicToCmsWhere(whereLogic),
478
+ orderBy,
479
+ desc: orderDirection === "desc",
480
+ limit,
481
+ offset
482
+ });
287
483
  });
288
484
  }
289
- function fetchCount(cmsId, cmsPublicToken, tableId, params, useDraft) {
485
+ function fetchCount(cmsId, cmsPublicToken, tableId, whereLogic, useDraft) {
290
486
  return __async(this, null, function* () {
487
+ if (!cmsId || !cmsPublicToken || !tableId) {
488
+ return 0;
489
+ }
291
490
  const api = mkApi({
292
491
  databaseId: cmsId,
293
492
  databaseToken: cmsPublicToken,
294
493
  host: getCmsHost(),
295
494
  useDraft
296
495
  });
297
- return api.count(tableId, params);
496
+ return api.count(tableId, {
497
+ where: rulesLogicToCmsWhere(whereLogic)
498
+ });
298
499
  });
299
500
  }
300
501
  function registerAllCmsFunctions(loader) {
@@ -323,7 +524,12 @@ function registerAllCmsFunctions(loader) {
323
524
  cmsIdParam,
324
525
  cmsPublicTokenParam,
325
526
  tableIdParam,
326
- paramsParam,
527
+ selectParam,
528
+ whereLogicParam,
529
+ orderByParam,
530
+ orderDirectionParam,
531
+ limitParam,
532
+ offsetParam,
327
533
  useDraftParam,
328
534
  localeParam
329
535
  ],
@@ -339,7 +545,7 @@ function registerAllCmsFunctions(loader) {
339
545
  cmsIdParam,
340
546
  cmsPublicTokenParam,
341
547
  tableIdParam,
342
- paramsParam,
548
+ whereLogicParam,
343
549
  useDraftParam
344
550
  ],
345
551
  fnContext: sharedTableFnContext
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/index.ts", "../src/api.ts", "../src/constants.ts", "../src/schema.ts", "../src/util.ts"],
4
- "sourcesContent": ["import registerFunction, {\n CustomFunctionMeta,\n} from \"@plasmicapp/host/registerFunction\";\n\nimport { QueryParams, mkApi } from \"./api\";\nimport { DEFAULT_HOST } from \"./constants\";\n\nfunction getCmsHost() {\n return (globalThis as any)[\"__PLASMIC_CMS_HOST__\"] ?? DEFAULT_HOST;\n}\n\nfunction createTableOptions(\n _args: unknown[],\n ctx: { tables: Array<{ identifier: string; name: string }> } | undefined\n): Array<{ value: string; label: string }> {\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\nconst sharedTableFnContext = (\n cmsId?: string,\n cmsPublicToken?: string,\n ..._args: unknown[]\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: \"The cms ID\",\n} as const;\n\nconst cmsPublicTokenParam = {\n name: \"cmsPublicToken\",\n type: \"string\",\n description: \"The cms public token\",\n} as const;\n\nconst tableIdParam = {\n name: \"tableId\",\n type: \"choice\",\n options: createTableOptions,\n} as const;\n\n// TODO: Directly handle the inner params available options\nconst paramsParam = {\n name: \"params\",\n type: \"object\",\n description:\n \"The parameters to filter the content (e.g., for sorting, limit, offset, advanced queries)\",\n} as const;\n\nconst useDraftParam = {\n name: \"useDraft\",\n type: \"boolean\",\n description: \"Whether to use draft data. Defaults to false.\",\n} as const;\n\nconst localeParam = {\n name: \"locale\",\n type: \"string\",\n description: \"The locale to use. Defaults to empty string.\",\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 params: QueryParams,\n useDraft: boolean,\n locale: string\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, params);\n}\n\nexport async function fetchCount(\n cmsId: string,\n cmsPublicToken: string,\n tableId: string,\n params: QueryParams,\n useDraft: boolean\n) {\n const api = mkApi({\n databaseId: cmsId,\n databaseToken: cmsPublicToken,\n host: getCmsHost(),\n useDraft,\n });\n\n return api.count(tableId, params);\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 paramsParam,\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 paramsParam,\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", "// 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 {\n identifier: string;\n name: string;\n helperText: string;\n required: boolean;\n hidden: boolean;\n}\n\nexport interface CmsTextLike {\n defaultValue?: string;\n minChars?: number;\n maxChars?: number;\n}\n\nexport interface CmsText extends CmsBaseType, CmsTextLike {\n type: CmsMetaType.TEXT;\n}\n\nexport interface CmsLongText extends CmsBaseType, CmsTextLike {\n type: CmsMetaType.LONG_TEXT;\n}\n\nexport interface CmsNumber extends CmsBaseType {\n type: CmsMetaType.NUMBER;\n defaultValue?: number;\n}\n\nexport interface CmsBoolean extends CmsBaseType {\n type: CmsMetaType.BOOLEAN;\n defaultValue?: boolean;\n}\n\nexport interface CmsImage extends CmsBaseType {\n type: CmsMetaType.IMAGE;\n defaultValue?: string;\n}\n\nexport interface CmsDateTime extends CmsBaseType {\n type: CmsMetaType.DATE_TIME;\n defaultValue?: string;\n}\n\nexport interface CmsRichText extends CmsBaseType {\n type: CmsMetaType.RICH_TEXT;\n defaultValue?: string;\n}\n\nexport interface CmsFile extends CmsBaseType {\n type: CmsMetaType.FILE;\n defaultValue?: string;\n}\n\nexport interface CmsRef extends CmsBaseType {\n type: CmsMetaType.REF;\n defaultValue?: string;\n}\n\nexport interface CmsEnum extends CmsBaseType {\n type: CmsMetaType.ENUM;\n defaultValue?: string;\n options: string[];\n}\n\nexport type CmsFieldMeta =\n | CmsText\n | CmsLongText\n | CmsNumber\n | CmsBoolean\n | CmsImage\n | CmsFile\n | CmsDateTime\n | CmsRef\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 { 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.name || f.identifier,\n }));\n if (!options.some((option) => option.value === \"_id\")) {\n options.push({\n label: \"System-assigned ID\",\n value: \"_id\",\n });\n }\n\n return options;\n}\n"],
5
- "mappings": "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",
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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",
6
6
  "names": ["CmsMetaType"]
7
7
  }
package/dist/index.js CHANGED
@@ -147,10 +147,11 @@ var API = class {
147
147
  }
148
148
  query(_0) {
149
149
  return __async(this, arguments, function* (table, params = {}) {
150
+ var _a;
150
151
  try {
151
152
  const response = yield this.get(`/tables/${table}/query`, {
152
153
  q: JSON.stringify(queryParamsToApi(params)),
153
- draft: Number(this.useDraftForTable(table) || params.useDraft),
154
+ draft: Number((_a = this.useDraftForTable(table)) != null ? _a : params.useDraft),
154
155
  locale: this.config.locale
155
156
  });
156
157
  return response.rows;
@@ -162,10 +163,11 @@ var API = class {
162
163
  }
163
164
  count(_0) {
164
165
  return __async(this, arguments, function* (table, params = {}) {
166
+ var _a;
165
167
  try {
166
168
  const response = yield this.get(`/tables/${table}/count`, {
167
169
  q: JSON.stringify(queryParamsToApi(params)),
168
- draft: Number(this.useDraftForTable(table) || params.useDraft)
170
+ draft: Number((_a = this.useDraftForTable(table)) != null ? _a : params.useDraft)
169
171
  });
170
172
  return response.count;
171
173
  } catch (e) {
@@ -185,24 +187,6 @@ function mkApi(config) {
185
187
  // src/constants.ts
186
188
  var DEFAULT_HOST = "https://data.plasmic.app";
187
189
 
188
- // src/schema.ts
189
- var CmsMetaType = /* @__PURE__ */ ((CmsMetaType2) => {
190
- CmsMetaType2["TEXT"] = "text";
191
- CmsMetaType2["LONG_TEXT"] = "long-text";
192
- CmsMetaType2["NUMBER"] = "number";
193
- CmsMetaType2["IMAGE"] = "image";
194
- CmsMetaType2["FILE"] = "file";
195
- CmsMetaType2["DATE_TIME"] = "date-time";
196
- CmsMetaType2["BOOLEAN"] = "boolean";
197
- CmsMetaType2["COLOR"] = "color";
198
- CmsMetaType2["RICH_TEXT"] = "rich-text";
199
- CmsMetaType2["REF"] = "ref";
200
- CmsMetaType2["LIST"] = "list";
201
- CmsMetaType2["OBJECT"] = "object";
202
- CmsMetaType2["ENUM"] = "enum";
203
- return CmsMetaType2;
204
- })(CmsMetaType || {});
205
-
206
190
  // src/util.ts
207
191
  function mkTableOptions(tables) {
208
192
  if (!tables) {
@@ -227,36 +211,173 @@ function mkFieldOptions(tables, tableIdentifier, types) {
227
211
  }
228
212
  const options = fields.map((f) => ({
229
213
  value: f.identifier,
230
- label: f.name || f.identifier
214
+ label: f.label || f.identifier
231
215
  }));
232
216
  if (!options.some((option) => option.value === "_id")) {
233
217
  options.push({
234
- label: "System-assigned ID",
218
+ label: "System ID",
235
219
  value: "_id"
236
220
  });
237
221
  }
238
222
  return options;
239
223
  }
240
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 || {});
242
+
243
+ // src/where.ts
244
+ function cmsTableToQueryBuilderConfig(table) {
245
+ const qbFields = {
246
+ _id: {
247
+ type: "text",
248
+ label: "System ID",
249
+ operators: ["equal", "not_equal"]
250
+ }
251
+ };
252
+ for (const field of table.schema.fields) {
253
+ const qbField = cmsFieldToQueryBuilderField(field);
254
+ if (qbField) {
255
+ qbFields[field.identifier] = qbField;
256
+ }
257
+ }
258
+ return {
259
+ fields: qbFields
260
+ };
261
+ }
262
+ function cmsFieldToQueryBuilderField(field) {
263
+ const label = field.label || field.identifier;
264
+ switch (field.type) {
265
+ case "text" /* TEXT */:
266
+ case "long-text" /* LONG_TEXT */:
267
+ case "ref" /* REF */: {
268
+ return {
269
+ type: "text",
270
+ label,
271
+ operators: ["equal", "not_equal", "regex"]
272
+ };
273
+ }
274
+ case "number" /* NUMBER */: {
275
+ return {
276
+ type: "number",
277
+ label,
278
+ operators: [
279
+ "equal",
280
+ "not_equal",
281
+ "less",
282
+ "less_or_equal",
283
+ "greater",
284
+ "greater_or_equal"
285
+ ]
286
+ };
287
+ }
288
+ case "boolean" /* BOOLEAN */: {
289
+ return {
290
+ type: "boolean",
291
+ label
292
+ };
293
+ }
294
+ case "date-time" /* DATE_TIME */: {
295
+ return {
296
+ type: "datetime",
297
+ label,
298
+ operators: [
299
+ "equal",
300
+ "not_equal",
301
+ "less",
302
+ "less_or_equal",
303
+ "greater",
304
+ "greater_or_equal"
305
+ ]
306
+ };
307
+ }
308
+ case "enum" /* ENUM */: {
309
+ return {
310
+ type: "select",
311
+ label,
312
+ listValues: field.options,
313
+ operators: ["select_equals", "select_not_equals", "select_any_in"]
314
+ };
315
+ }
316
+ case "color" /* COLOR */:
317
+ case "file" /* FILE */:
318
+ case "image" /* IMAGE */:
319
+ case "list" /* LIST */:
320
+ case "object" /* OBJECT */:
321
+ case "rich-text" /* RICH_TEXT */:
322
+ return;
323
+ }
324
+ }
325
+ function rulesLogicToCmsWhere(logic) {
326
+ if (logic === null || logic === void 0) {
327
+ return void 0;
328
+ } else if (typeof logic !== "object") {
329
+ throw new Error(`unexpected logic: ${JSON.stringify(logic)}`);
330
+ } else if ("and" in logic) {
331
+ return {
332
+ $and: logic["and"].map(rulesLogicToCmsWhere)
333
+ };
334
+ } else if ("or" in logic) {
335
+ return {
336
+ $or: logic["or"].map(rulesLogicToCmsWhere)
337
+ };
338
+ } else if ("!" in logic) {
339
+ return {
340
+ $not: rulesLogicToCmsWhere(logic["!"])
341
+ };
342
+ } else if ("==" in logic) {
343
+ const [{ var: field }, operand] = logic["=="];
344
+ return {
345
+ [field]: operand
346
+ };
347
+ } else if ("!=" in logic) {
348
+ const [{ var: field }, operand] = logic["!="];
349
+ return {
350
+ $not: { [field]: operand }
351
+ };
352
+ } else {
353
+ const [key, value] = Object.entries(logic)[0];
354
+ const apiOp = operatorMapping[key];
355
+ if (apiOp) {
356
+ const [{ var: field }, operand] = value;
357
+ return { [field]: { [apiOp]: operand } };
358
+ }
359
+ throw new Error(`unexpected logic: ${JSON.stringify(logic)}`);
360
+ }
361
+ }
362
+ var operatorMapping = {
363
+ "<": "$lt",
364
+ "<=": "$le",
365
+ ">": "$gt",
366
+ ">=": "$ge",
367
+ in: "$in",
368
+ regex: "$regex"
369
+ };
370
+
241
371
  // src/index.ts
242
372
  function getCmsHost() {
243
373
  var _a;
244
374
  return (_a = globalThis["__PLASMIC_CMS_HOST__"]) != null ? _a : DEFAULT_HOST;
245
375
  }
246
- function createTableOptions(_args, ctx) {
247
- if (!(ctx == null ? void 0 : ctx.tables)) {
248
- return [];
249
- }
250
- return ctx.tables.map((table) => ({
251
- value: table.identifier,
252
- label: table.name
253
- }));
254
- }
255
- var sharedTableFnContext = (cmsId, cmsPublicToken, ..._args) => {
376
+ function sharedTableFnContext(cmsId, cmsPublicToken, ..._args) {
256
377
  if (!cmsId || !cmsPublicToken) {
257
378
  return {
258
379
  dataKey: "",
259
- fetcher: () => __async(void 0, null, function* () {
380
+ fetcher: () => __async(this, null, function* () {
260
381
  return { tables: [] };
261
382
  })
262
383
  };
@@ -266,7 +387,7 @@ var sharedTableFnContext = (cmsId, cmsPublicToken, ..._args) => {
266
387
  cmsId,
267
388
  cmsPublicToken
268
389
  })}`,
269
- fetcher: () => __async(void 0, null, function* () {
390
+ fetcher: () => __async(this, null, function* () {
270
391
  const api = mkApi({
271
392
  databaseId: cmsId,
272
393
  databaseToken: cmsPublicToken,
@@ -276,36 +397,101 @@ var sharedTableFnContext = (cmsId, cmsPublicToken, ..._args) => {
276
397
  return { tables };
277
398
  })
278
399
  };
279
- };
400
+ }
280
401
  var cmsIdParam = {
281
402
  name: "cmsId",
282
403
  type: "string",
283
- description: "The cms ID"
404
+ description: "Find the CMS ID on the Plasmic CMS settings page."
284
405
  };
285
406
  var cmsPublicTokenParam = {
286
407
  name: "cmsPublicToken",
287
408
  type: "string",
288
- description: "The cms public token"
409
+ description: "Find the Public Token on the Plasmic CMS settings page."
289
410
  };
290
411
  var tableIdParam = {
291
412
  name: "tableId",
292
413
  type: "choice",
293
- options: createTableOptions
414
+ options: (_args, ctx) => {
415
+ if (!(ctx == null ? void 0 : ctx.tables)) {
416
+ return [];
417
+ }
418
+ return ctx.tables.map((table) => ({
419
+ value: table.identifier,
420
+ label: table.name
421
+ }));
422
+ }
423
+ };
424
+ var selectParam = {
425
+ name: "select",
426
+ type: "choice",
427
+ multiSelect: true,
428
+ description: "Fields to fetch. Defaults to all fields.",
429
+ defaultValueHint: ["Default: *"],
430
+ options: (args, ctx) => {
431
+ const tableId = args[2];
432
+ return mkFieldOptions(ctx.tables, tableId);
433
+ }
294
434
  };
295
- var paramsParam = {
296
- name: "params",
297
- type: "object",
298
- description: "The parameters to filter the content (e.g., for sorting, limit, offset, advanced queries)"
435
+ var whereLogicParam = {
436
+ name: "where",
437
+ type: "queryBuilder",
438
+ description: "Filter fetched entries. Defaults to fetch all entries.",
439
+ config: (args, ctx) => {
440
+ const tableId = args[2];
441
+ const table = ctx.tables.find((t) => t.identifier === tableId);
442
+ if (table) {
443
+ return cmsTableToQueryBuilderConfig(table);
444
+ } else {
445
+ return { fields: {} };
446
+ }
447
+ }
448
+ };
449
+ var orderByParam = {
450
+ name: "orderBy",
451
+ type: "choice",
452
+ 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);
456
+ }
457
+ };
458
+ var orderDirectionParam = {
459
+ name: "orderDirection",
460
+ label: "Direction",
461
+ type: "choice",
462
+ options: [
463
+ {
464
+ value: "asc",
465
+ label: "Ascending"
466
+ },
467
+ {
468
+ value: "desc",
469
+ label: "Descending"
470
+ }
471
+ ],
472
+ defaultValueHint: "Default: Ascending"
473
+ };
474
+ var limitParam = {
475
+ name: "limit",
476
+ type: "number",
477
+ description: "Maximum number of entries to fetch."
478
+ };
479
+ var offsetParam = {
480
+ name: "offset",
481
+ type: "number",
482
+ description: "Number of entries to skip.",
483
+ defaultValueHint: 0
299
484
  };
300
485
  var useDraftParam = {
301
486
  name: "useDraft",
302
487
  type: "boolean",
303
- description: "Whether to use draft data. Defaults to false."
488
+ description: "Whether to use draft data.",
489
+ defaultValueHint: false
304
490
  };
305
491
  var localeParam = {
306
492
  name: "locale",
307
493
  type: "string",
308
- description: "The locale to use. Defaults to empty string."
494
+ description: "The locale to use. Defaults to base locale."
309
495
  };
310
496
  function fetchTables(cmsId, cmsPublicToken) {
311
497
  return __async(this, null, function* () {
@@ -317,8 +503,11 @@ function fetchTables(cmsId, cmsPublicToken) {
317
503
  return api.fetchTables();
318
504
  });
319
505
  }
320
- function fetchContent(cmsId, cmsPublicToken, tableId, params, useDraft, locale) {
506
+ function fetchContent(cmsId, cmsPublicToken, tableId, select, whereLogic, orderBy, orderDirection, limit, offset, useDraft, locale) {
321
507
  return __async(this, null, function* () {
508
+ if (!cmsId || !cmsPublicToken || !tableId) {
509
+ return [];
510
+ }
322
511
  const api = mkApi({
323
512
  databaseId: cmsId,
324
513
  databaseToken: cmsPublicToken,
@@ -326,18 +515,30 @@ function fetchContent(cmsId, cmsPublicToken, tableId, params, useDraft, locale)
326
515
  useDraft,
327
516
  locale
328
517
  });
329
- return api.query(tableId, params);
518
+ return api.query(tableId, {
519
+ fields: select,
520
+ where: rulesLogicToCmsWhere(whereLogic),
521
+ orderBy,
522
+ desc: orderDirection === "desc",
523
+ limit,
524
+ offset
525
+ });
330
526
  });
331
527
  }
332
- function fetchCount(cmsId, cmsPublicToken, tableId, params, useDraft) {
528
+ function fetchCount(cmsId, cmsPublicToken, tableId, whereLogic, useDraft) {
333
529
  return __async(this, null, function* () {
530
+ if (!cmsId || !cmsPublicToken || !tableId) {
531
+ return 0;
532
+ }
334
533
  const api = mkApi({
335
534
  databaseId: cmsId,
336
535
  databaseToken: cmsPublicToken,
337
536
  host: getCmsHost(),
338
537
  useDraft
339
538
  });
340
- return api.count(tableId, params);
539
+ return api.count(tableId, {
540
+ where: rulesLogicToCmsWhere(whereLogic)
541
+ });
341
542
  });
342
543
  }
343
544
  function registerAllCmsFunctions(loader) {
@@ -366,7 +567,12 @@ function registerAllCmsFunctions(loader) {
366
567
  cmsIdParam,
367
568
  cmsPublicTokenParam,
368
569
  tableIdParam,
369
- paramsParam,
570
+ selectParam,
571
+ whereLogicParam,
572
+ orderByParam,
573
+ orderDirectionParam,
574
+ limitParam,
575
+ offsetParam,
370
576
  useDraftParam,
371
577
  localeParam
372
578
  ],
@@ -382,7 +588,7 @@ function registerAllCmsFunctions(loader) {
382
588
  cmsIdParam,
383
589
  cmsPublicTokenParam,
384
590
  tableIdParam,
385
- paramsParam,
591
+ whereLogicParam,
386
592
  useDraftParam
387
593
  ],
388
594
  fnContext: sharedTableFnContext
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/schema.ts", "../src/util.ts"],
4
- "sourcesContent": ["import registerFunction, {\n CustomFunctionMeta,\n} from \"@plasmicapp/host/registerFunction\";\n\nimport { QueryParams, mkApi } from \"./api\";\nimport { DEFAULT_HOST } from \"./constants\";\n\nfunction getCmsHost() {\n return (globalThis as any)[\"__PLASMIC_CMS_HOST__\"] ?? DEFAULT_HOST;\n}\n\nfunction createTableOptions(\n _args: unknown[],\n ctx: { tables: Array<{ identifier: string; name: string }> } | undefined\n): Array<{ value: string; label: string }> {\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\nconst sharedTableFnContext = (\n cmsId?: string,\n cmsPublicToken?: string,\n ..._args: unknown[]\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: \"The cms ID\",\n} as const;\n\nconst cmsPublicTokenParam = {\n name: \"cmsPublicToken\",\n type: \"string\",\n description: \"The cms public token\",\n} as const;\n\nconst tableIdParam = {\n name: \"tableId\",\n type: \"choice\",\n options: createTableOptions,\n} as const;\n\n// TODO: Directly handle the inner params available options\nconst paramsParam = {\n name: \"params\",\n type: \"object\",\n description:\n \"The parameters to filter the content (e.g., for sorting, limit, offset, advanced queries)\",\n} as const;\n\nconst useDraftParam = {\n name: \"useDraft\",\n type: \"boolean\",\n description: \"Whether to use draft data. Defaults to false.\",\n} as const;\n\nconst localeParam = {\n name: \"locale\",\n type: \"string\",\n description: \"The locale to use. Defaults to empty string.\",\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 params: QueryParams,\n useDraft: boolean,\n locale: string\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, params);\n}\n\nexport async function fetchCount(\n cmsId: string,\n cmsPublicToken: string,\n tableId: string,\n params: QueryParams,\n useDraft: boolean\n) {\n const api = mkApi({\n databaseId: cmsId,\n databaseToken: cmsPublicToken,\n host: getCmsHost(),\n useDraft,\n });\n\n return api.count(tableId, params);\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 paramsParam,\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 paramsParam,\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", "// 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 {\n identifier: string;\n name: string;\n helperText: string;\n required: boolean;\n hidden: boolean;\n}\n\nexport interface CmsTextLike {\n defaultValue?: string;\n minChars?: number;\n maxChars?: number;\n}\n\nexport interface CmsText extends CmsBaseType, CmsTextLike {\n type: CmsMetaType.TEXT;\n}\n\nexport interface CmsLongText extends CmsBaseType, CmsTextLike {\n type: CmsMetaType.LONG_TEXT;\n}\n\nexport interface CmsNumber extends CmsBaseType {\n type: CmsMetaType.NUMBER;\n defaultValue?: number;\n}\n\nexport interface CmsBoolean extends CmsBaseType {\n type: CmsMetaType.BOOLEAN;\n defaultValue?: boolean;\n}\n\nexport interface CmsImage extends CmsBaseType {\n type: CmsMetaType.IMAGE;\n defaultValue?: string;\n}\n\nexport interface CmsDateTime extends CmsBaseType {\n type: CmsMetaType.DATE_TIME;\n defaultValue?: string;\n}\n\nexport interface CmsRichText extends CmsBaseType {\n type: CmsMetaType.RICH_TEXT;\n defaultValue?: string;\n}\n\nexport interface CmsFile extends CmsBaseType {\n type: CmsMetaType.FILE;\n defaultValue?: string;\n}\n\nexport interface CmsRef extends CmsBaseType {\n type: CmsMetaType.REF;\n defaultValue?: string;\n}\n\nexport interface CmsEnum extends CmsBaseType {\n type: CmsMetaType.ENUM;\n defaultValue?: string;\n options: string[];\n}\n\nexport type CmsFieldMeta =\n | CmsText\n | CmsLongText\n | CmsNumber\n | CmsBoolean\n | CmsImage\n | CmsFile\n | CmsDateTime\n | CmsRef\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 { 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.name || f.identifier,\n }));\n if (!options.some((option) => option.value === \"_id\")) {\n options.push({\n label: \"System-assigned ID\",\n value: \"_id\",\n });\n }\n\n return options;\n}\n"],
5
- "mappings": "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",
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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",
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.4",
3
+ "version": "0.0.6",
4
4
  "description": "Plasmic CMS custom functions",
5
5
  "repository": {
6
6
  "type": "git",
@@ -27,15 +27,18 @@
27
27
  "build": "yarn build:types && yarn build:index",
28
28
  "build:types": "yarn tsc",
29
29
  "build:index": "node ../../build.mjs ./src/index.ts",
30
+ "test": "TEST_CWD=`pwd` yarn --cwd=../../.. test",
30
31
  "prepublishOnly": "npm run build",
31
32
  "postpublish": "bash ../../scripts/publish-api-doc-model.sh"
32
33
  },
33
34
  "devDependencies": {
34
- "@plasmicapp/host": "1.0.229",
35
+ "@plasmicapp/host": "1.0.230",
36
+ "@react-awesome-query-builder/core": "^6.0.0",
37
+ "@types/json-logic-js": "^2.0.0",
35
38
  "@types/node": "^17.0.14"
36
39
  },
37
40
  "peerDependencies": {
38
41
  "@plasmicapp/host": "^1.0.211"
39
42
  },
40
- "gitHead": "bf8e3de2d53a1280fa9bc20fffbe6641eb73ab02"
43
+ "gitHead": "38173d19290002d5a09d67da44e4c9f1c1682d37"
41
44
  }