Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions fix_test.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
--- src/__tests__/unit/init-file-generator.test.ts
+++ src/__tests__/unit/init-file-generator.test.ts
@@ -53,7 +53,7 @@
expect(serverControllerFile.contents).toContain(`.plugin('${pluginId}')`);
});

- it('should put admin runtime deps in peerDependencies (and devDependencies), not dependencies', async () => {
+ it('should put admin runtime deps in peerDependencies (and devDependencies) for standalone plugins', async () => {
const { generateFiles } = await import('../../cli/commands/utils/init/file-generator');

const logger = {
@@ -92,6 +92,44 @@
expect(pkgJson.devDependencies?.['react-intl']).toBeDefined();
});

+ it('should NOT put admin runtime deps in devDependencies for local plugins', async () => {
+ const { generateFiles } = await import('../../cli/commands/utils/init/file-generator');
+
+ const logger = {
+ info: jest.fn(),
+ debug: jest.fn(),
+ warn: jest.fn(),
+ error: jest.fn(),
+ log: jest.fn(),
+ };
+
+ const files = await generateFiles(
+ [
+ { name: 'pkgName', answer: 'my-plugin' },
+ { name: 'pluginId', answer: 'my-plugin' },
+ { name: 'client-code', answer: true },
+ { name: 'server-code', answer: false },
+ { name: 'typescript', answer: true },
+ ],
+ 'my-plugin',
+ logger as any,
+ true // isStrapiProject = true
+ );
+
+ const pkgJsonFile = getFile(files, 'package.json');
+ const pkgJson = JSON.parse(pkgJsonFile.contents);
+
+ expect(pkgJson.dependencies?.['@strapi/design-system']).toBeUndefined();
+ expect(pkgJson.dependencies?.['@strapi/icons']).toBeUndefined();
+
+ expect(pkgJson.peerDependencies?.['@strapi/design-system']).toBeDefined();
+ expect(pkgJson.peerDependencies?.['@strapi/icons']).toBeDefined();
+
+ expect(pkgJson.devDependencies?.['@strapi/design-system']).toBeUndefined();
+ expect(pkgJson.devDependencies?.['@strapi/icons']).toBeUndefined();
+ expect(pkgJson.devDependencies?.['@strapi/strapi']).toBeUndefined();
+ });
+
it('should constrain react-intl to v6 range (compatible with React 18)', async () => {
const { getLatestVersion } = jest.requireMock('get-latest-version');
getLatestVersion.mockClear();
40 changes: 39 additions & 1 deletion src/__tests__/unit/init-file-generator.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ describe('init file generation', () => {
expect(serverControllerFile.contents).toContain(`.plugin('${pluginId}')`);
});

it('should put admin runtime deps in peerDependencies (and devDependencies), not dependencies', async () => {
it('should put admin runtime deps in peerDependencies (and devDependencies) for standalone plugins', async () => {
const { generateFiles } = await import('../../cli/commands/utils/init/file-generator');

const logger = {
Expand Down Expand Up @@ -92,6 +92,44 @@ describe('init file generation', () => {
expect(pkgJson.devDependencies?.['react-intl']).toBeDefined();
});

it('should NOT put admin runtime deps in devDependencies for local plugins', async () => {
const { generateFiles } = await import('../../cli/commands/utils/init/file-generator');

const logger = {
info: jest.fn(),
debug: jest.fn(),
warn: jest.fn(),
error: jest.fn(),
log: jest.fn(),
};

const files = await generateFiles(
[
{ name: 'pkgName', answer: 'my-plugin' },
{ name: 'pluginId', answer: 'my-plugin' },
{ name: 'client-code', answer: true },
{ name: 'server-code', answer: false },
{ name: 'typescript', answer: true },
],
'my-plugin',
logger as any,
true // isStrapiProject = true
);

const pkgJsonFile = getFile(files, 'package.json');
const pkgJson = JSON.parse(pkgJsonFile.contents);

expect(pkgJson.dependencies?.['@strapi/design-system']).toBeUndefined();
expect(pkgJson.dependencies?.['@strapi/icons']).toBeUndefined();

expect(pkgJson.peerDependencies?.['@strapi/design-system']).toBeDefined();
expect(pkgJson.peerDependencies?.['@strapi/icons']).toBeDefined();

expect(pkgJson.devDependencies?.['@strapi/design-system']).toBeUndefined();
expect(pkgJson.devDependencies?.['@strapi/icons']).toBeUndefined();
expect(pkgJson.devDependencies?.['@strapi/strapi']).toBeUndefined();
});

it('should constrain react-intl to v6 range (compatible with React 18)', async () => {
const { getLatestVersion } = jest.requireMock('get-latest-version');
getLatestVersion.mockClear();
Expand Down
1 change: 1 addition & 0 deletions src/cli/commands/plugin/init/action.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ export default async (
const answers = await init({
cwd,
path: pluginPath,
isStrapiProject,
silent,
debug,
logger,
Expand Down
13 changes: 9 additions & 4 deletions src/cli/commands/utils/init/file-generator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ import type { PromptAnswer, TemplateFile } from './types';
export const generateFiles = async (
answers: PromptAnswer[],
packageFolder: string,
logger: Logger
logger: Logger,
isStrapiProject: boolean = false
): Promise<TemplateFile[]> => {
const author: string[] = [];
const files: TemplateFile[] = [];
Expand Down Expand Up @@ -47,7 +48,7 @@ export const generateFiles = async (
},
dependencies: {},
devDependencies: {
'@strapi/strapi': '^5.0.0',
...(isStrapiProject ? {} : { '@strapi/strapi': '^5.0.0' }),
'@strapi/sdk-plugin': '^6.0.0',
prettier: '*',
},
Expand Down Expand Up @@ -114,8 +115,12 @@ export const generateFiles = async (

pkgJson.devDependencies = {
...pkgJson.devDependencies,
'@strapi/design-system': '^2.0.0',
'@strapi/icons': '^2.0.0',
...(isStrapiProject
? {}
: {
'@strapi/design-system': '^2.0.0',
'@strapi/icons': '^2.0.0',
}),
'react-intl': '^6.0.0',
react: '^18.0.0',
'react-dom': '^18.0.0',
Expand Down
2 changes: 1 addition & 1 deletion src/cli/commands/utils/init/init.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ export const init = async (options: InitOptions): Promise<PromptAnswer[]> => {
}

// Generate files based on answers
const files = await generateFiles(answers, packageFolder, logger);
const files = await generateFiles(answers, packageFolder, logger, options.isStrapiProject);

if (debug) {
logger.debug(`Generated ${files.length} files`);
Expand Down
1 change: 1 addition & 0 deletions src/cli/commands/utils/init/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ export interface GitConfig {
export interface InitOptions {
cwd: string;
path: string;
isStrapiProject?: boolean;
silent?: boolean;
debug?: boolean;
logger: Logger;
Expand Down