Skip to content

Commit

Permalink
chore: init facades & cleanup public interface of strapi/strapi
Browse files Browse the repository at this point in the history
  • Loading branch information
alexandrebodin committed Mar 26, 2024
1 parent fd7c075 commit 21684ed
Show file tree
Hide file tree
Showing 37 changed files with 176 additions and 114 deletions.
6 changes: 3 additions & 3 deletions cli-tests/scripts/dts-export.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ const {
},
engine: { createTransferEngine },
} = require('@strapi/data-transfer');
const { strapiFactory } = require('@strapi/strapi');
const { createStrapi, compileStrapi } = require('@strapi/strapi');
const path = require('path');

/**
Expand Down Expand Up @@ -77,8 +77,8 @@ const createDestinationProvider = (datasetPath) => {
};

const createStrapiInstance = async (logLevel = 'error') => {
const appContext = await strapiFactory.compile();
const app = strapiFactory(appContext);
const appContext = await compileStrapi();
const app = createStrapi(appContext);

app.log.level = logLevel;
return app.load();
Expand Down
6 changes: 3 additions & 3 deletions e2e/scripts/dts-export.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ const {
},
engine: { createTransferEngine },
} = require('@strapi/data-transfer');
const { strapiFactory } = require('@strapi/strapi');
const { createStrapi, compileStrapi } = require('@strapi/strapi');
const { ALLOWED_CONTENT_TYPES } = require('../constants');

/**
Expand Down Expand Up @@ -83,8 +83,8 @@ const createDestinationProvider = (filePath) =>
});

const createStrapiInstance = async (logLevel = 'error') => {
const appContext = await strapiFactory.compile();
const app = strapiFactory(appContext);
const appContext = await compileStrapi();
const app = createStrapi(appContext);

app.log.level = logLevel;
const loadedApp = await app.load();
Expand Down
1 change: 1 addition & 0 deletions examples/getstarted/src/api/address/controllers/address.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const { createCoreController } = require('@strapi/strapi').factories;
const { strapi } = require('@strapi/strapi');

module.exports = createCoreController('api::address.address', {
async find(ctx) {
Expand Down
1 change: 1 addition & 0 deletions packages/core/core/.eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ node_modules/
jest.config.js
dist/
scripts/
vite.config.mjs
23 changes: 20 additions & 3 deletions packages/core/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,20 @@
"require": "./dist/index.js",
"default": "./dist/index.js"
},
"./strapi": {
"types": "./dist/facades/strapi.d.ts",
"source": "./src/facades/strapi.ts",
"import": "./dist/facades/strapi.mjs",
"require": "./dist/facades/strapi.js",
"default": "./dist/facades/strapi.js"
},
"./config": {
"types": "./dist/facades/config.d.ts",
"source": "./src/facades/config.ts",
"import": "./dist/facades/config.mjs",
"require": "./dist/facades/config.js",
"default": "./dist/facades/config.js"
},
"./package.json": "./package.json"
},
"main": "./dist/index.js",
Expand All @@ -42,14 +56,14 @@
"resources/"
],
"scripts": {
"build": "run pack-up build && run copy-files",
"build": "vite build && run copy-files",
"clean": "run -T rimraf ./dist",
"copy-files": "copyfiles -u 1 -a 'src/**/*.html' 'src/**/*.png' dist",
"lint": "run -T eslint .",
"prepublishOnly": "yarn clean && yarn build",
"test:unit": "run -T jest",
"test:unit:watch": "run -T jest --watch",
"watch": "pack-up watch"
"watch": "vite build -w"
},
"dependencies": {
"@koa/cors": "3.4.3",
Expand Down Expand Up @@ -123,8 +137,11 @@
"@types/node-schedule": "2.1.0",
"@types/statuses": "2.0.1",
"eslint-config-custom": "5.0.0-beta.0",
"rollup-plugin-node-externals": "7.1.1",
"supertest": "6.3.3",
"tsconfig": "5.0.0-beta.0"
"tsconfig": "5.0.0-beta.0",
"vite": "5.1.6",
"vite-plugin-dts": "3.7.3"
},
"engines": {
"node": ">=18.0.0 <=20.x.x",
Expand Down
19 changes: 0 additions & 19 deletions packages/core/core/packup.config.ts

This file was deleted.

31 changes: 13 additions & 18 deletions packages/core/core/src/Strapi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@ import { isFunction } from 'lodash/fp';
import { Logger, createLogger } from '@strapi/logger';
import { Database } from '@strapi/database';
import { hooks } from '@strapi/utils';
import type { Core, Modules, UID, Schema } from '@strapi/types';
import type { Core, Modules, UID, Schema, Utils } from '@strapi/types';

import loadConfiguration from './configuration';

import * as factories from './factories';
import compile from './compile';

import * as utils from './utils';
import * as registries from './registries';
Expand Down Expand Up @@ -158,6 +157,8 @@ class Strapi extends Container implements Core.Strapi {
// @ts-expect-error - Assigned in constructor
ee: Core.Strapi['ee'];

private loadedCallbacks: Utils.Function.Any[] = [];

constructor(opts: StrapiOptions = {}) {
super();

Expand Down Expand Up @@ -574,9 +575,17 @@ class Strapi extends Container implements Core.Strapi {

this.isLoaded = true;

for (const cb of this.loadedCallbacks) {
await cb();
}

return this as this & Required<Core.Strapi>;
}

async loaded(cb: Utils.Function.Any) {
this.loadedCallbacks.push(cb);
}

async startWebhooks() {
const webhooks = await this.webhookStore?.findWebhooks();
if (!webhooks) {
Expand Down Expand Up @@ -625,25 +634,11 @@ class Strapi extends Container implements Core.Strapi {
}
}

interface StrapiOptions {
export interface StrapiOptions {
appDir?: string;
distDir?: string;
autoReload?: boolean;
serveAdminPanel?: boolean;
}

interface Init {
(options?: StrapiOptions): Core.Strapi;
factories: typeof factories;
compile: typeof compile;
}

const initFn = (options: StrapiOptions = {}): Core.Strapi => {
const strapi = new Strapi(options);
global.strapi = strapi as LoadedStrapi;
return strapi;
};

const init: Init = Object.assign(initFn, { factories, compile });

export default init;
export default Strapi;
10 changes: 10 additions & 0 deletions packages/core/core/src/facades/strapi.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import type { Core } from '@strapi/types';

// eslint-disable-next-line import/no-mutable-exports
let strapi: Core.Strapi;

export const setStrapiInstance = (strapiInstance: Core.Strapi) => {
strapi = strapiInstance;
};

export { strapi };
16 changes: 14 additions & 2 deletions packages/core/core/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
import strapiFactory from './Strapi';
import type { Core } from '@strapi/types';

import Strapi, { type StrapiOptions } from './Strapi';
import { setStrapiInstance } from './facades/strapi';

export { default as compileStrapi } from './compile';
export * as factories from './factories';

export { strapiFactory };
export const createStrapi = (options: StrapiOptions = {}): Core.Strapi => {
const strapi = new Strapi(options);
setStrapiInstance(strapi);

// TODO: deprecate and remove in next major
global.strapi = strapi as Core.LoadedStrapi;

return strapi;
};
29 changes: 29 additions & 0 deletions packages/core/core/vite.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { defineConfig } from 'vite';
import dts from 'vite-plugin-dts';
import { nodeExternals } from 'rollup-plugin-node-externals';

// TODO: support multi entry in pack-up

export default defineConfig({
build: {
minify: false,
sourcemap: true,
lib: {
entry: ['src/index.ts', 'src/facades/strapi.ts'],
},
rollupOptions: {
output: {
interop: 'auto',
preserveModules: true,
preserveModulesRoot: 'src',
},
plugins: [nodeExternals()],
},
},
plugins: [
dts({
outDir: './dist',
tsconfigPath: './tsconfig.build.json',
}),
],
});
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ const transaction = jest.fn(async (cb) => {
await cb({ trx, rollback });
});

const strapiFactory = getStrapiFactory({
const createStrapi = getStrapiFactory({
dirs: {
static: {
public: 'static/public/assets',
Expand Down Expand Up @@ -57,7 +57,7 @@ describe('Local Strapi Destination Provider - Get Assets Stream', () => {

test('Returns a stream when assets restore is true', async () => {
const provider = createLocalStrapiDestinationProvider({
getStrapi: () => strapiFactory(),
getStrapi: () => createStrapi(),
strategy: 'restore',
restore: {
assets: true,
Expand All @@ -72,7 +72,7 @@ describe('Local Strapi Destination Provider - Get Assets Stream', () => {

test('Throw an error if attempting to create stream while restore assets is false', async () => {
const provider = createLocalStrapiDestinationProvider({
getStrapi: () => strapiFactory(),
getStrapi: () => createStrapi(),
strategy: 'restore',
restore: {
assets: false,
Expand All @@ -96,7 +96,7 @@ describe('Local Strapi Destination Provider - Get Assets Stream', () => {
};
const provider = createLocalStrapiDestinationProvider({
getStrapi: () =>
strapiFactory({
createStrapi({
dirs: {
static: {
public: assetsDirectory,
Expand Down
2 changes: 2 additions & 0 deletions packages/core/strapi/packup.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ export default defineConfig({
},
{
source: './src/cli/index.ts',
import: './dist/cli/index.ts',
require: './dist/cli/index.js',
types: './dist/cli/index.d.ts',
runtime: 'node',
},
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,11 @@ const mock = {
};

jest.mock('@strapi/core', () => {
const strapiFactory: any = jest.fn(() => mock);
const createStrapi: any = jest.fn(() => mock);

strapiFactory.compile = jest.fn();
compileStrapi = jest.fn();

return { strapiFactory };
return { createStrapi };
});

describe('admin:create command', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@ const mock = {
};

jest.mock('@strapi/core', () => {
const strapiFactory = jest.fn(() => mock);
const createStrapi = jest.fn(() => mock);

Object.assign(strapiFactory, {
Object.assign(createStrapi, {
compile: jest.fn(),
});

return { strapiFactory };
return { createStrapi };
});

describe('admin:reset-password command', () => {
Expand Down
6 changes: 3 additions & 3 deletions packages/core/strapi/src/cli/commands/admin/create-user.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { createCommand } from 'commander';
import { yup } from '@strapi/utils';
import _ from 'lodash';
import inquirer from 'inquirer';
import { strapiFactory } from '@strapi/core';
import { createStrapi, compileStrapi } from '@strapi/core';

import { runAction } from '../../utils/helpers';
import type { StrapiCommand } from '../../types';
Expand Down Expand Up @@ -73,8 +73,8 @@ const promptQuestions: inquirer.QuestionCollection<Answers> = [
];

async function createAdmin({ email, password, firstname, lastname }: CmdOptions) {
const appContext = await strapiFactory.compile();
const app = await strapiFactory(appContext).load();
const appContext = await compileStrapi();
const app = await createStrapi(appContext).load();

const user = await app.admin.services.user.exists({ email });

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import _ from 'lodash';
import inquirer from 'inquirer';
import { createCommand } from 'commander';
import { strapiFactory } from '@strapi/core';
import { createStrapi, compileStrapi } from '@strapi/core';

import type { StrapiCommand } from '../../types';
import { runAction } from '../../utils/helpers';
Expand All @@ -28,8 +28,8 @@ const promptQuestions: ReadonlyArray<inquirer.DistinctQuestion<Answers>> = [
];

async function changePassword({ email, password }: CmdOptions) {
const appContext = await strapiFactory.compile();
const app = await strapiFactory(appContext).load();
const appContext = await compileStrapi();
const app = await createStrapi(appContext).load();

await app.admin.services.user.resetPasswordByEmail(email, password);

Expand Down
6 changes: 3 additions & 3 deletions packages/core/strapi/src/cli/commands/components/list.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { createCommand } from 'commander';
import CLITable from 'cli-table3';
import chalk from 'chalk';
import { strapiFactory } from '@strapi/core';
import { createStrapi, compileStrapi } from '@strapi/core';

import type { StrapiCommand } from '../../types';
import { runAction } from '../../utils/helpers';

const action = async () => {
const appContext = await strapiFactory.compile();
const app = await strapiFactory(appContext).register();
const appContext = await compileStrapi();
const app = await createStrapi(appContext).register();

const list = Object.keys(app.components);

Expand Down

0 comments on commit 21684ed

Please sign in to comment.