@malevich-studio/strapi-sdk-typescript 1.2.15 → 1.2.17

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/cli.mjs CHANGED
@@ -21440,17 +21440,22 @@ class Strapi {
21440
21440
  log(data);
21441
21441
  return data;
21442
21442
  }
21443
- }
21444
-
21445
- /**
21446
- * Returns the TypeScript interface name from a component UID
21447
- * e.g. "default.test-component" => "DefaultTestComponent"
21448
- */
21449
- function getComponentName(uid) {
21450
- return uid
21451
- .split(/[\.\-]/)
21452
- .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
21453
- .join('');
21443
+ async can(uid, controller, action) {
21444
+ if (!this.permissions) {
21445
+ const response = await this.fetchData('users-permissions/permissions');
21446
+ this.permissions = response.permissions;
21447
+ }
21448
+ if (!this.permissions[uid]) {
21449
+ throw new Error(`Permissions for ${uid} not found!`);
21450
+ }
21451
+ if (!this.permissions[uid].controllers[controller]) {
21452
+ throw new Error(`Permissions for ${uid}.${controller} not found!`);
21453
+ }
21454
+ if (!this.permissions[uid].controllers[controller][action]) {
21455
+ throw new Error(`Permission for ${uid}.${controller}.${action} not found!`);
21456
+ }
21457
+ return this.permissions[uid].controllers[controller][action].enabled;
21458
+ }
21454
21459
  }
21455
21460
 
21456
21461
  var AttributeMode;
@@ -21523,32 +21528,6 @@ class BaseRelation extends Base {
21523
21528
  }
21524
21529
  }
21525
21530
 
21526
- class Media extends BaseRelation {
21527
- constructor(name, attribute) {
21528
- super(name, attribute);
21529
- this.name = name;
21530
- this.attribute = attribute;
21531
- }
21532
- getType() {
21533
- return this.attribute.multiple ? 'File[]' : 'File';
21534
- }
21535
- getInputType() {
21536
- return 'number[]';
21537
- }
21538
- getPopulates() {
21539
- return [{
21540
- name: this.name,
21541
- type: 'FileQuery',
21542
- }];
21543
- }
21544
- getFilters() {
21545
- return [{
21546
- name: this.name,
21547
- type: 'FileFilters',
21548
- }];
21549
- }
21550
- }
21551
-
21552
21531
  /**
21553
21532
  * Returns the TypeScript interface name from a content type UID
21554
21533
  * e.g. "api::article.article" => "Article"
@@ -21623,6 +21602,43 @@ class Relation extends BaseRelation {
21623
21602
  }
21624
21603
  }
21625
21604
 
21605
+ /**
21606
+ * Returns the TypeScript interface name from a component UID
21607
+ * e.g. "default.test-component" => "DefaultTestComponent"
21608
+ */
21609
+ function getComponentName(uid) {
21610
+ return uid
21611
+ .split(/[\.\-]/)
21612
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
21613
+ .join('');
21614
+ }
21615
+
21616
+ class Media extends BaseRelation {
21617
+ constructor(name, attribute) {
21618
+ super(name, attribute);
21619
+ this.name = name;
21620
+ this.attribute = attribute;
21621
+ }
21622
+ getType() {
21623
+ return this.attribute.multiple ? 'File[]' : 'File';
21624
+ }
21625
+ getInputType() {
21626
+ return 'number[]';
21627
+ }
21628
+ getPopulates() {
21629
+ return [{
21630
+ name: this.name,
21631
+ type: 'FileQuery',
21632
+ }];
21633
+ }
21634
+ getFilters() {
21635
+ return [{
21636
+ name: this.name,
21637
+ type: 'FileFilters',
21638
+ }];
21639
+ }
21640
+ }
21641
+
21626
21642
  class Enumeration extends Base {
21627
21643
  constructor(name, attribute) {
21628
21644
  super(name, attribute);
@@ -21932,14 +21948,22 @@ function generateMethodsCode(contentType) {
21932
21948
  ` return await this.delete<${modelName}>('${contentType.schema.pluralName}', id, params);`,
21933
21949
  ' }',
21934
21950
  ].join('\n'));
21951
+ console.log(contentType.uid);
21952
+ if (contentType.uid.startsWith('api::')) {
21953
+ methods.push([
21954
+ ` public async can${getContentTypeName(contentType.schema.singularName)}(action: PermissionAction) {`,
21955
+ ` return await this.can('${contentType.uid}', '${contentType.schema.singularName.replace(/^api::/, '')}', action);`,
21956
+ ' }',
21957
+ ].join('\n'));
21958
+ }
21935
21959
  return methods;
21936
21960
  }
21937
21961
  /**
21938
21962
  * Main function to fetch Strapi (v5) data and generate the d.ts file
21939
21963
  */
21940
21964
  async function generateStrapiTypes(strapi) {
21941
- const contentTypes = (await strapi.fetch('content-type-builder/content-types')).data;
21942
- const components = (await strapi.fetch('content-type-builder/components')).data;
21965
+ const contentTypes = (await strapi.fetch('content-type-builder/content-types')).data || [];
21966
+ const components = (await strapi.fetch('content-type-builder/components')).data || [];
21943
21967
  const allInterfaces = [];
21944
21968
  const methods = [];
21945
21969
  for (const component of components) {
@@ -21982,6 +22006,12 @@ async function generateStrapiTypes(strapi) {
21982
22006
  locale: {
21983
22007
  type: 'string',
21984
22008
  },
22009
+ localizations: {
22010
+ type: 'relation',
22011
+ target: contentType.uid,
22012
+ relation: AttributeRelation.OneToMany,
22013
+ required: true,
22014
+ },
21985
22015
  } : {}),
21986
22016
  ...contentType.schema.attributes,
21987
22017
  };
@@ -21990,7 +22020,7 @@ async function generateStrapiTypes(strapi) {
21990
22020
  allInterfaces.push(generateInputTypeCode(modelName, attributes));
21991
22021
  }
21992
22022
  const output = [
21993
- 'import {Strapi as StrapiBase, Query, Filters, FilterValue, RelationInput, DynamiczonePopulate, DynamiczoneComponent} from "@malevich-studio/strapi-sdk-typescript";',
22023
+ 'import {Strapi as StrapiBase, Query, Filters, FilterValue, RelationInput, DynamiczonePopulate, DynamiczoneComponent, PermissionAction} from "@malevich-studio/strapi-sdk-typescript";',
21994
22024
  'import {BlocksContent} from "@strapi/blocks-react-renderer";',
21995
22025
  '',
21996
22026
  'export default class Strapi extends StrapiBase {',