@dani-builder/strapi-plugin-builder 0.1.0

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.
Files changed (87) hide show
  1. package/bin/sync.js +320 -0
  2. package/dist/server/src/bootstrap.d.ts +6 -0
  3. package/dist/server/src/bootstrap.d.ts.map +1 -0
  4. package/dist/server/src/bootstrap.js +8 -0
  5. package/dist/server/src/bootstrap.js.map +1 -0
  6. package/dist/server/src/components/blocks/bento-grid.json +29 -0
  7. package/dist/server/src/components/blocks/content.json +23 -0
  8. package/dist/server/src/components/blocks/cta.json +37 -0
  9. package/dist/server/src/components/blocks/faq.json +20 -0
  10. package/dist/server/src/components/blocks/features.json +32 -0
  11. package/dist/server/src/components/blocks/hero.json +42 -0
  12. package/dist/server/src/components/blocks/highlights.json +32 -0
  13. package/dist/server/src/components/blocks/inquiry-form.json +18 -0
  14. package/dist/server/src/components/blocks/logo-cloud.json +27 -0
  15. package/dist/server/src/components/blocks/pricing.json +27 -0
  16. package/dist/server/src/components/blocks/slider.json +27 -0
  17. package/dist/server/src/components/blocks/stats.json +32 -0
  18. package/dist/server/src/components/blocks/team.json +27 -0
  19. package/dist/server/src/components/blocks/testimonials.json +32 -0
  20. package/dist/server/src/components/elements/footer.json +36 -0
  21. package/dist/server/src/components/elements/section.json +41 -0
  22. package/dist/server/src/components/shared/analytics-setting.json +26 -0
  23. package/dist/server/src/components/shared/bento-item.json +42 -0
  24. package/dist/server/src/components/shared/brand-colors.json +17 -0
  25. package/dist/server/src/components/shared/chatbot-setting.json +25 -0
  26. package/dist/server/src/components/shared/feature-item.json +28 -0
  27. package/dist/server/src/components/shared/highlight-item.json +27 -0
  28. package/dist/server/src/components/shared/link.json +27 -0
  29. package/dist/server/src/components/shared/logo-item.json +24 -0
  30. package/dist/server/src/components/shared/navigation-group.json +21 -0
  31. package/dist/server/src/components/shared/pricing-tier.json +36 -0
  32. package/dist/server/src/components/shared/seo.json +39 -0
  33. package/dist/server/src/components/shared/site-verification.json +22 -0
  34. package/dist/server/src/components/shared/slider-item.json +27 -0
  35. package/dist/server/src/components/shared/stat-item.json +20 -0
  36. package/dist/server/src/components/shared/team-member.json +30 -0
  37. package/dist/server/src/components/shared/testimonial-item.json +35 -0
  38. package/dist/server/src/controllers/global.d.ts +12 -0
  39. package/dist/server/src/controllers/global.d.ts.map +1 -0
  40. package/dist/server/src/controllers/global.js +22 -0
  41. package/dist/server/src/controllers/global.js.map +1 -0
  42. package/dist/server/src/controllers/index.d.ts +3 -0
  43. package/dist/server/src/controllers/index.d.ts.map +1 -0
  44. package/dist/server/src/controllers/index.js +13 -0
  45. package/dist/server/src/controllers/index.js.map +1 -0
  46. package/dist/server/src/controllers/page.d.ts +17 -0
  47. package/dist/server/src/controllers/page.d.ts.map +1 -0
  48. package/dist/server/src/controllers/page.js +37 -0
  49. package/dist/server/src/controllers/page.js.map +1 -0
  50. package/dist/server/src/index.d.ts +3 -0
  51. package/dist/server/src/index.d.ts.map +1 -0
  52. package/dist/server/src/index.js +19 -0
  53. package/dist/server/src/index.js.map +1 -0
  54. package/dist/server/src/register.d.ts +11 -0
  55. package/dist/server/src/register.d.ts.map +1 -0
  56. package/dist/server/src/register.js +48 -0
  57. package/dist/server/src/register.js.map +1 -0
  58. package/dist/server/src/routes/content-api.d.ts +14 -0
  59. package/dist/server/src/routes/content-api.d.ts.map +1 -0
  60. package/dist/server/src/routes/content-api.js +35 -0
  61. package/dist/server/src/routes/content-api.js.map +1 -0
  62. package/dist/server/src/routes/index.d.ts +16 -0
  63. package/dist/server/src/routes/index.d.ts.map +1 -0
  64. package/dist/server/src/routes/index.js +10 -0
  65. package/dist/server/src/routes/index.js.map +1 -0
  66. package/dist/server/src/services/index.d.ts +3 -0
  67. package/dist/server/src/services/index.d.ts.map +1 -0
  68. package/dist/server/src/services/index.js +11 -0
  69. package/dist/server/src/services/index.js.map +1 -0
  70. package/dist/server/src/services/populate.d.ts +75 -0
  71. package/dist/server/src/services/populate.d.ts.map +1 -0
  72. package/dist/server/src/services/populate.js +252 -0
  73. package/dist/server/src/services/populate.js.map +1 -0
  74. package/package.json +55 -0
  75. package/schemas/api/article/content-types/article/schema.json +102 -0
  76. package/schemas/api/author/content-types/author/schema.json +44 -0
  77. package/schemas/api/category/content-types/category/schema.json +43 -0
  78. package/schemas/api/faq/content-types/faq/schema.json +36 -0
  79. package/schemas/api/global/content-types/global/schema.json +64 -0
  80. package/schemas/api/inquiry/content-types/inquiry/schema.json +31 -0
  81. package/schemas/api/navigation/content-types/navigation/schema.json +52 -0
  82. package/schemas/api/page/content-types/page/schema.json +62 -0
  83. package/schemas/api/series/content-types/series/schema.json +44 -0
  84. package/schemas/api/site-setting/content-types/site-setting/schema.json +35 -0
  85. package/schemas/api/tag/content-types/tag/schema.json +44 -0
  86. package/schemas/manifest.json +16 -0
  87. package/strapi-server.js +3 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global.js","sourceRoot":"","sources":["../../../../server/src/controllers/global.ts"],"names":[],"mappings":";;AAEA,MAAM,MAAM,GAAG,CAAC,EAAE,MAAM,EAA2B,EAAE,EAAE,CAAC,CAAC;IACvD;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,GAAQ;QACjB,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAG,eAAe,CAAC,iBAAiB,EAAE,CAAC;QAErD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,SAAS,CAAC;YACpE,QAAQ;YACR,GAAG,GAAG,CAAC,KAAK;SACb,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QAC1C,CAAC;QAED,GAAG,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC;CACF,CAAC,CAAC;AAEH,kBAAe,MAAM,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const controllers: Record<string, unknown>;
2
+ export default controllers;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/index.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAGxC,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const page_1 = __importDefault(require("./page"));
7
+ const global_1 = __importDefault(require("./global"));
8
+ const controllers = {
9
+ page: page_1.default,
10
+ global: global_1.default,
11
+ };
12
+ exports.default = controllers;
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/src/controllers/index.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAC1B,sDAA8B;AAE9B,MAAM,WAAW,GAA4B;IAC3C,IAAI,EAAJ,cAAI;IACJ,MAAM,EAAN,gBAAM;CACP,CAAC;AAEF,kBAAe,WAAW,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { Core } from '@strapi/strapi';
2
+ declare const page: ({ strapi }: {
3
+ strapi: Core.Strapi;
4
+ }) => {
5
+ /**
6
+ * GET /api/builder/pages
7
+ * List pages with minimal populate (no blocks)
8
+ */
9
+ find(ctx: any): Promise<void>;
10
+ /**
11
+ * GET /api/builder/pages/:documentId
12
+ * Single page with deep block populate
13
+ */
14
+ findOne(ctx: any): Promise<any>;
15
+ };
16
+ export default page;
17
+ //# sourceMappingURL=page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE3C,QAAA,MAAM,IAAI,GAAI,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;IAC/C;;;OAGG;cACa,GAAG;IAYnB;;;OAGG;iBACgB,GAAG;CAiBtB,CAAC;AAEH,eAAe,IAAI,CAAC"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const page = ({ strapi }) => ({
4
+ /**
5
+ * GET /api/builder/pages
6
+ * List pages with minimal populate (no blocks)
7
+ */
8
+ async find(ctx) {
9
+ const populateService = strapi.plugin('builder').service('populate');
10
+ const populate = populateService.getPageListPopulate();
11
+ const results = await strapi.documents('api::page.page').findMany({
12
+ ...ctx.query,
13
+ populate,
14
+ });
15
+ ctx.body = { data: results, meta: {} };
16
+ },
17
+ /**
18
+ * GET /api/builder/pages/:documentId
19
+ * Single page with deep block populate
20
+ */
21
+ async findOne(ctx) {
22
+ const { documentId } = ctx.params;
23
+ const populateService = strapi.plugin('builder').service('populate');
24
+ const populate = populateService.getPagePopulate();
25
+ const result = await strapi.documents('api::page.page').findOne({
26
+ documentId,
27
+ populate,
28
+ ...ctx.query,
29
+ });
30
+ if (!result) {
31
+ return ctx.notFound('Page not found');
32
+ }
33
+ ctx.body = { data: result };
34
+ },
35
+ });
36
+ exports.default = page;
37
+ //# sourceMappingURL=page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.js","sourceRoot":"","sources":["../../../../server/src/controllers/page.ts"],"names":[],"mappings":";;AAEA,MAAM,IAAI,GAAG,CAAC,EAAE,MAAM,EAA2B,EAAE,EAAE,CAAC,CAAC;IACrD;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,GAAQ;QACjB,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAG,eAAe,CAAC,mBAAmB,EAAE,CAAC;QAEvD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC;YAChE,GAAG,GAAG,CAAC,KAAK;YACZ,QAAQ;SACT,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACzC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,GAAQ;QACpB,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAClC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAG,eAAe,CAAC,eAAe,EAAE,CAAC;QAEnD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC;YAC9D,UAAU;YACV,QAAQ;YACR,GAAG,GAAG,CAAC,KAAK;SACb,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QACxC,CAAC;QAED,GAAG,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC;CACF,CAAC,CAAC;AAEH,kBAAe,IAAI,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const plugin: Record<string, unknown>;
2
+ export default plugin;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAMnC,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const register_1 = __importDefault(require("./register"));
7
+ const bootstrap_1 = __importDefault(require("./bootstrap"));
8
+ const controllers_1 = __importDefault(require("./controllers"));
9
+ const services_1 = __importDefault(require("./services"));
10
+ const routes_1 = __importDefault(require("./routes"));
11
+ const plugin = {
12
+ register: register_1.default,
13
+ bootstrap: bootstrap_1.default,
14
+ controllers: controllers_1.default,
15
+ services: services_1.default,
16
+ routes: routes_1.default,
17
+ };
18
+ exports.default = plugin;
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":";;;;;AAAA,0DAAkC;AAClC,4DAAoC;AACpC,gEAAwC;AACxC,0DAAkC;AAClC,sDAA8B;AAE9B,MAAM,MAAM,GAA4B;IACtC,QAAQ,EAAR,kBAAQ;IACR,SAAS,EAAT,mBAAS;IACT,WAAW,EAAX,qBAAW;IACX,QAAQ,EAAR,kBAAQ;IACR,MAAM,EAAN,gBAAM;CACP,CAAC;AAEF,kBAAe,MAAM,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Core } from '@strapi/strapi';
2
+ /**
3
+ * Programmatically register all plugin components (blocks, elements, shared)
4
+ * into Strapi's component registry so they are available in Dynamic Zones
5
+ * and Content-Type Builder without manual schema creation.
6
+ */
7
+ declare const register: ({ strapi }: {
8
+ strapi: Core.Strapi;
9
+ }) => void;
10
+ export default register;
11
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../server/src/register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAc3C;;;;GAIG;AACH,QAAA,MAAM,QAAQ,GAAI,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE,SA6BpD,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const path_1 = __importDefault(require("path"));
7
+ const fs_1 = __importDefault(require("fs"));
8
+ function upperFirst(str) {
9
+ return str.charAt(0).toUpperCase() + str.slice(1);
10
+ }
11
+ function camelCase(str) {
12
+ return str
13
+ .replace(/[^a-zA-Z0-9]+(.)/g, (_, c) => c.toUpperCase())
14
+ .replace(/^[A-Z]/, (c) => c.toLowerCase());
15
+ }
16
+ /**
17
+ * Programmatically register all plugin components (blocks, elements, shared)
18
+ * into Strapi's component registry so they are available in Dynamic Zones
19
+ * and Content-Type Builder without manual schema creation.
20
+ */
21
+ const register = ({ strapi }) => {
22
+ const componentsDir = path_1.default.join(__dirname, 'components');
23
+ const categories = ['blocks', 'elements', 'shared'];
24
+ const componentsMap = {};
25
+ for (const category of categories) {
26
+ const categoryDir = path_1.default.join(componentsDir, category);
27
+ if (!fs_1.default.existsSync(categoryDir))
28
+ continue;
29
+ const files = fs_1.default.readdirSync(categoryDir).filter((f) => f.endsWith('.json'));
30
+ for (const file of files) {
31
+ const schema = JSON.parse(fs_1.default.readFileSync(path_1.default.join(categoryDir, file), 'utf-8'));
32
+ const componentName = file.replace('.json', '');
33
+ const uid = `${category}.${componentName}`;
34
+ componentsMap[uid] = {
35
+ ...schema,
36
+ __schema__: JSON.parse(JSON.stringify(schema)),
37
+ uid,
38
+ category,
39
+ modelType: 'component',
40
+ modelName: componentName,
41
+ globalId: schema.globalId || upperFirst(camelCase(`component_${uid}`)),
42
+ };
43
+ }
44
+ }
45
+ strapi.get('components').add(componentsMap);
46
+ };
47
+ exports.default = register;
48
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../../server/src/register.ts"],"names":[],"mappings":";;;;;AACA,gDAAwB;AACxB,4CAAoB;AAEpB,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,GAAG;SACP,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SAC/D,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED;;;;GAIG;AACH,MAAM,QAAQ,GAAG,CAAC,EAAE,MAAM,EAA2B,EAAE,EAAE;IACvD,MAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,aAAa,GAAwB,EAAE,CAAC;IAE9C,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,SAAS;QAE1C,MAAM,KAAK,GAAG,YAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAE7E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YAClF,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAChD,MAAM,GAAG,GAAG,GAAG,QAAQ,IAAI,aAAa,EAAE,CAAC;YAE3C,aAAa,CAAC,GAAG,CAAC,GAAG;gBACnB,GAAG,MAAM;gBACT,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAC9C,GAAG;gBACH,QAAQ;gBACR,SAAS,EAAE,WAAW;gBACtB,SAAS,EAAE,aAAa;gBACxB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,UAAU,CAAC,SAAS,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC;aACvE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF,kBAAe,QAAQ,CAAC"}
@@ -0,0 +1,14 @@
1
+ declare const _default: {
2
+ type: string;
3
+ routes: {
4
+ method: string;
5
+ path: string;
6
+ handler: string;
7
+ config: {
8
+ policies: never[];
9
+ description: string;
10
+ };
11
+ }[];
12
+ };
13
+ export default _default;
14
+ //# sourceMappingURL=content-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-api.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/content-api.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wBA+BE"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = {
4
+ type: 'content-api',
5
+ routes: [
6
+ {
7
+ method: 'GET',
8
+ path: '/pages',
9
+ handler: 'page.find',
10
+ config: {
11
+ policies: [],
12
+ description: 'List pages with minimal populate',
13
+ },
14
+ },
15
+ {
16
+ method: 'GET',
17
+ path: '/pages/:documentId',
18
+ handler: 'page.findOne',
19
+ config: {
20
+ policies: [],
21
+ description: 'Get single page with deep block populate',
22
+ },
23
+ },
24
+ {
25
+ method: 'GET',
26
+ path: '/global',
27
+ handler: 'global.find',
28
+ config: {
29
+ policies: [],
30
+ description: 'Get global settings with deep populate',
31
+ },
32
+ },
33
+ ],
34
+ };
35
+ //# sourceMappingURL=content-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-api.js","sourceRoot":"","sources":["../../../../server/src/routes/content-api.ts"],"names":[],"mappings":";;AAAA,kBAAe;IACb,IAAI,EAAE,aAAa;IACnB,MAAM,EAAE;QACN;YACE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,WAAW;YACpB,MAAM,EAAE;gBACN,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,kCAAkC;aAChD;SACF;QACD;YACE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE;gBACN,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,0CAA0C;aACxD;SACF;QACD;YACE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,aAAa;YACtB,MAAM,EAAE;gBACN,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,wCAAwC;aACtD;SACF;KACF;CACF,CAAC"}
@@ -0,0 +1,16 @@
1
+ declare const _default: {
2
+ 'content-api': {
3
+ type: string;
4
+ routes: {
5
+ method: string;
6
+ path: string;
7
+ handler: string;
8
+ config: {
9
+ policies: never[];
10
+ description: string;
11
+ };
12
+ }[];
13
+ };
14
+ };
15
+ export default _default;
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAEA,wBAEE"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const content_api_1 = __importDefault(require("./content-api"));
7
+ exports.default = {
8
+ 'content-api': content_api_1.default,
9
+ };
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/src/routes/index.ts"],"names":[],"mappings":";;;;;AAAA,gEAAuC;AAEvC,kBAAe;IACb,aAAa,EAAE,qBAAU;CAC1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const services: Record<string, unknown>;
2
+ export default services;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/services/index.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAErC,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const populate_1 = __importDefault(require("./populate"));
7
+ const services = {
8
+ populate: populate_1.default,
9
+ };
10
+ exports.default = services;
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/src/services/index.ts"],"names":[],"mappings":";;;;;AAAA,0DAAkC;AAElC,MAAM,QAAQ,GAA4B;IACxC,QAAQ,EAAR,kBAAQ;CACT,CAAC;AAEF,kBAAe,QAAQ,CAAC"}
@@ -0,0 +1,75 @@
1
+ import type { Core } from '@strapi/strapi';
2
+ declare const populate: ({ strapi }: {
3
+ strapi: Core.Strapi;
4
+ }) => {
5
+ /**
6
+ * Build the full blocks populate map (core + custom blocks).
7
+ * Called during bootstrap to initialize.
8
+ */
9
+ buildBlocksPopulate(): {
10
+ [x: string]: object;
11
+ };
12
+ /**
13
+ * Register a custom block's populate configuration.
14
+ * Called by client projects in their register() lifecycle.
15
+ */
16
+ registerBlock(componentId: string, populateConfig: object): void;
17
+ /**
18
+ * Get the full Dynamic Zone populate for Page.blocks
19
+ */
20
+ getPageBlocksPopulate(): {
21
+ on: Record<string, object>;
22
+ };
23
+ /**
24
+ * Get populate for a full Page query (with blocks deep populated)
25
+ */
26
+ getPagePopulate(): {
27
+ seo: {
28
+ populate: {
29
+ ogImage: boolean;
30
+ };
31
+ };
32
+ blocks: {
33
+ on: Record<string, object>;
34
+ };
35
+ };
36
+ /**
37
+ * Get populate for Page list (minimal — no blocks)
38
+ */
39
+ getPageListPopulate(): {
40
+ seo: {
41
+ populate: {
42
+ ogImage: boolean;
43
+ };
44
+ };
45
+ };
46
+ /**
47
+ * Get populate for Global (siteWideBlocks + footer deep populated)
48
+ */
49
+ getGlobalPopulate(): {
50
+ seo: {
51
+ populate: {
52
+ ogImage: boolean;
53
+ };
54
+ };
55
+ home: boolean;
56
+ footer: {
57
+ populate: {
58
+ socialLinks: boolean;
59
+ otherLinks: boolean;
60
+ sitemap: {
61
+ populate: {
62
+ links: boolean;
63
+ };
64
+ };
65
+ logo: boolean;
66
+ };
67
+ };
68
+ siteWideBlocks: {
69
+ on: Record<string, object>;
70
+ };
71
+ favicon: boolean;
72
+ };
73
+ };
74
+ export default populate;
75
+ //# sourceMappingURL=populate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"populate.d.ts","sourceRoot":"","sources":["../../../../server/src/services/populate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE3C,QAAA,MAAM,QAAQ,GAAI,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;IAyJjD;;;OAGG;;;;IAKH;;;OAGG;+BACwB,MAAM,kBAAkB,MAAM;IAIzD;;OAEG;;;;IAUH;;OAEG;;;;;;;;;;;IAYH;;OAEG;;;;;;;;IAWH;;OAEG;;;;;;;;;;;;;;;;;;;;;;;;;CA+CN,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,252 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const populate = ({ strapi }) => {
4
+ const customBlocks = new Map();
5
+ // Section populate — reused by nearly every block
6
+ const sectionPopulate = {
7
+ populate: {
8
+ backgroundImage: true,
9
+ },
10
+ };
11
+ // Link populate — flat component, no nested relations
12
+ const linkPopulate = true;
13
+ // Core block populate definitions (Plugin owns these components,
14
+ // so it knows the exact nesting structure)
15
+ const coreBlocks = {
16
+ 'blocks.hero': {
17
+ populate: {
18
+ section: sectionPopulate,
19
+ heroMedia: true,
20
+ ctaLink: linkPopulate,
21
+ secondaryLink: linkPopulate,
22
+ },
23
+ },
24
+ 'blocks.features': {
25
+ populate: {
26
+ section: sectionPopulate,
27
+ media: true,
28
+ items: {
29
+ populate: {
30
+ link: linkPopulate,
31
+ },
32
+ },
33
+ },
34
+ },
35
+ 'blocks.cta': {
36
+ populate: {
37
+ section: sectionPopulate,
38
+ ctaMedia: true,
39
+ ctaLink: linkPopulate,
40
+ secondaryLink: linkPopulate,
41
+ },
42
+ },
43
+ 'blocks.slider': {
44
+ populate: {
45
+ section: sectionPopulate,
46
+ items: {
47
+ populate: {
48
+ link: linkPopulate,
49
+ media: true,
50
+ },
51
+ },
52
+ },
53
+ },
54
+ 'blocks.inquiry-form': {
55
+ populate: {
56
+ section: sectionPopulate,
57
+ },
58
+ },
59
+ 'blocks.faq': {
60
+ populate: {
61
+ section: sectionPopulate,
62
+ items: {
63
+ populate: {
64
+ category: true,
65
+ },
66
+ },
67
+ },
68
+ },
69
+ 'blocks.highlights': {
70
+ populate: {
71
+ section: sectionPopulate,
72
+ media: true,
73
+ items: {
74
+ populate: {
75
+ media: true,
76
+ link: linkPopulate,
77
+ },
78
+ },
79
+ },
80
+ },
81
+ 'blocks.bento-grid': {
82
+ populate: {
83
+ section: sectionPopulate,
84
+ items: {
85
+ populate: {
86
+ media: true,
87
+ link: linkPopulate,
88
+ },
89
+ },
90
+ },
91
+ },
92
+ 'blocks.testimonials': {
93
+ populate: {
94
+ section: sectionPopulate,
95
+ media: true,
96
+ items: {
97
+ populate: {
98
+ avatar: true,
99
+ logo: true,
100
+ },
101
+ },
102
+ },
103
+ },
104
+ 'blocks.logo-cloud': {
105
+ populate: {
106
+ section: sectionPopulate,
107
+ items: {
108
+ populate: {
109
+ logo: true,
110
+ link: linkPopulate,
111
+ },
112
+ },
113
+ },
114
+ },
115
+ 'blocks.stats': {
116
+ populate: {
117
+ section: sectionPopulate,
118
+ media: true,
119
+ items: true,
120
+ },
121
+ },
122
+ 'blocks.pricing': {
123
+ populate: {
124
+ section: sectionPopulate,
125
+ items: {
126
+ populate: {
127
+ ctaLink: linkPopulate,
128
+ },
129
+ },
130
+ },
131
+ },
132
+ 'blocks.content': {
133
+ populate: {
134
+ section: sectionPopulate,
135
+ },
136
+ },
137
+ 'blocks.team': {
138
+ populate: {
139
+ section: sectionPopulate,
140
+ items: {
141
+ populate: {
142
+ photo: true,
143
+ socialLinks: linkPopulate,
144
+ },
145
+ },
146
+ },
147
+ },
148
+ // elements.section can appear directly in Page.blocks as a standalone divider
149
+ 'elements.section': sectionPopulate,
150
+ };
151
+ return {
152
+ /**
153
+ * Build the full blocks populate map (core + custom blocks).
154
+ * Called during bootstrap to initialize.
155
+ */
156
+ buildBlocksPopulate() {
157
+ return { ...coreBlocks, ...Object.fromEntries(customBlocks) };
158
+ },
159
+ /**
160
+ * Register a custom block's populate configuration.
161
+ * Called by client projects in their register() lifecycle.
162
+ */
163
+ registerBlock(componentId, populateConfig) {
164
+ customBlocks.set(componentId, populateConfig);
165
+ },
166
+ /**
167
+ * Get the full Dynamic Zone populate for Page.blocks
168
+ */
169
+ getPageBlocksPopulate() {
170
+ const allBlocks = this.buildBlocksPopulate();
171
+ const onPopulate = {};
172
+ for (const [key, value] of Object.entries(allBlocks)) {
173
+ onPopulate[key] = value;
174
+ }
175
+ return { on: onPopulate };
176
+ },
177
+ /**
178
+ * Get populate for a full Page query (with blocks deep populated)
179
+ */
180
+ getPagePopulate() {
181
+ return {
182
+ seo: {
183
+ populate: {
184
+ ogImage: true,
185
+ },
186
+ },
187
+ blocks: this.getPageBlocksPopulate(),
188
+ };
189
+ },
190
+ /**
191
+ * Get populate for Page list (minimal — no blocks)
192
+ */
193
+ getPageListPopulate() {
194
+ return {
195
+ seo: {
196
+ populate: {
197
+ ogImage: true,
198
+ },
199
+ },
200
+ };
201
+ },
202
+ /**
203
+ * Get populate for Global (siteWideBlocks + footer deep populated)
204
+ */
205
+ getGlobalPopulate() {
206
+ // siteWideBlocks uses a subset of blocks
207
+ const siteWideBlockKeys = [
208
+ 'blocks.slider',
209
+ 'blocks.inquiry-form',
210
+ 'blocks.hero',
211
+ 'blocks.features',
212
+ ];
213
+ const allBlocks = this.buildBlocksPopulate();
214
+ const siteWideOn = {};
215
+ for (const key of siteWideBlockKeys) {
216
+ if (allBlocks[key]) {
217
+ siteWideOn[key] = allBlocks[key];
218
+ }
219
+ }
220
+ // Also include any custom blocks registered for siteWideBlocks
221
+ for (const [key, value] of customBlocks) {
222
+ if (!siteWideOn[key]) {
223
+ siteWideOn[key] = value;
224
+ }
225
+ }
226
+ return {
227
+ seo: {
228
+ populate: {
229
+ ogImage: true,
230
+ },
231
+ },
232
+ home: true,
233
+ footer: {
234
+ populate: {
235
+ socialLinks: linkPopulate,
236
+ otherLinks: linkPopulate,
237
+ sitemap: {
238
+ populate: {
239
+ links: linkPopulate,
240
+ },
241
+ },
242
+ logo: true,
243
+ },
244
+ },
245
+ siteWideBlocks: { on: siteWideOn },
246
+ favicon: true,
247
+ };
248
+ },
249
+ };
250
+ };
251
+ exports.default = populate;
252
+ //# sourceMappingURL=populate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"populate.js","sourceRoot":"","sources":["../../../../server/src/services/populate.ts"],"names":[],"mappings":"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"}