Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into release/0.18.0
Browse files Browse the repository at this point in the history
  • Loading branch information
alvinhui committed Mar 2, 2021
2 parents ad83490 + 39144fc commit fa8615b
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 5 deletions.
4 changes: 4 additions & 0 deletions packages/project-utils/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# changelog

## 0.3.3
- feat: add loose mode check for getProjectTypeInfo, check `devDependencies` and `keywords`.
2 changes: 1 addition & 1 deletion packages/project-utils/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@iceworks/project-utils",
"version": "0.3.2",
"version": "0.3.3",
"description": "General tool library for Iceworks Project.",
"files": [
"lib"
Expand Down
33 changes: 29 additions & 4 deletions packages/project-utils/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@ export type ProjectLanguageType = 'ts' | 'js';
export type ProjectTypeInfo = { type: ProjectType, version: string };
export type ProjectFrameworkInfo = { framework: ProjectFramework, version: string };

export async function getProjectTypeInfo(projectPath: string): Promise<ProjectTypeInfo> {
export async function getProjectTypeInfo(projectPath: string, loose?: boolean): Promise<ProjectTypeInfo> {
let type: ProjectType = 'unknown';
let version = 'unknown';

try {
const packageJsonPath = join(projectPath, packageJSONFilename);
const { dependencies = {}, peerDependencies = {} } = JSON.parse(await readFileAsync(packageJsonPath, 'utf-8'));
const { dependencies = {}, peerDependencies = {}, devDependencies = {}, keywords = [] } = JSON.parse(await readFileAsync(packageJsonPath, 'utf-8'));

if (dependencies.rax || peerDependencies.rax) {
type = 'rax';
Expand All @@ -31,6 +31,31 @@ export async function getProjectTypeInfo(projectPath: string): Promise<ProjectTy
type = 'vue';
version = dependencies.vue || peerDependencies.vue;
}

// loose getProjectTypeInfo by devDependencies
if (loose && type === 'unknown') {
if (devDependencies.rax) {
type = 'rax';
version = devDependencies.rax;
} else if (devDependencies.react) {
type = 'react';
version = devDependencies.react;
} else if (devDependencies.vue) {
type = 'vue';
version = devDependencies.vue;
}
}

// loose getProjectTypeInfo by keywords, for cdn or other framework inject target info.
if (loose && type === 'unknown' && Array.isArray(keywords)) {
if (keywords.find(keyword => keyword === 'rax')) {
type = 'rax';
} else if (keywords.find(keyword => keyword === 'react')) {
type = 'react';
} else if (keywords.find(keyword => keyword === 'vue')) {
type = 'vue';
}
}
} catch (error) {
console.error('process projectType error:', error);
}
Expand Down Expand Up @@ -91,8 +116,8 @@ export async function getProjectFrameworkInfo(projectPath: string): Promise<Proj
return { framework, version };
}

export async function getProjectType(projectPath: string): Promise<ProjectType> {
const { type } = await getProjectTypeInfo(projectPath);
export async function getProjectType(projectPath: string, loose?: boolean): Promise<ProjectType> {
const { type } = await getProjectTypeInfo(projectPath, loose);
return type;
}

Expand Down

0 comments on commit fa8615b

Please sign in to comment.