@mr.dj2u/doctor 0.1.1 → 0.1.3
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/checks/expo-config.d.ts.map +1 -1
- package/dist/checks/expo-config.js +29 -2
- package/dist/checks/expo-config.js.map +1 -1
- package/dist/checks/seo-metadata.d.ts.map +1 -1
- package/dist/checks/seo-metadata.js +35 -1
- package/dist/checks/seo-metadata.js.map +1 -1
- package/dist/checks/todo-for-context.d.ts.map +1 -1
- package/dist/checks/todo-for-context.js +3 -13
- package/dist/checks/todo-for-context.js.map +1 -1
- package/dist/cli.js +0 -0
- package/package.json +53 -54
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expo-config.d.ts","sourceRoot":"","sources":["../../src/checks/expo-config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAGlE,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"expo-config.d.ts","sourceRoot":"","sources":["../../src/checks/expo-config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAGlE,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,iBAAiB,CAAC,CA2D5B"}
|
|
@@ -6,18 +6,33 @@ export async function checkExpoConfiguration(packageJson, projectPath) {
|
|
|
6
6
|
...packageJson.devDependencies,
|
|
7
7
|
};
|
|
8
8
|
const hasExpoRouter = 'expo-router' in deps;
|
|
9
|
+
const errors = [];
|
|
9
10
|
const warnings = [];
|
|
11
|
+
const appJson = await readAppJson(projectPath);
|
|
12
|
+
const platformList = readNestedStringArray(appJson, ['expo', 'platforms']);
|
|
13
|
+
const invalidPlatforms = platformList.filter((platform) => !['ios', 'android', 'web'].includes(platform));
|
|
14
|
+
if (invalidPlatforms.length > 0) {
|
|
15
|
+
errors.push(`app.json contains unsupported expo.platforms entries: ${invalidPlatforms.join(', ')}. Use only ios, android, and web in Expo config.`);
|
|
16
|
+
}
|
|
10
17
|
if (hasExpoRouter && packageJson.main !== 'expo-router/entry') {
|
|
11
18
|
warnings.push('expo-router is installed but package.json main is not expo-router/entry.');
|
|
12
19
|
}
|
|
13
20
|
const apiRouteFiles = await findFiles(projectPath, (filePath) => filePath.endsWith('+api.ts'));
|
|
14
21
|
if (apiRouteFiles.length > 0) {
|
|
15
|
-
const appJson = await readAppJson(projectPath);
|
|
16
22
|
const webOutput = readNestedString(appJson, ['expo', 'web', 'output']);
|
|
17
|
-
|
|
23
|
+
const targetsWeb = platformList.length === 0 || platformList.includes('web');
|
|
24
|
+
if (targetsWeb && webOutput !== 'server') {
|
|
18
25
|
warnings.push('Expo API routes found, but app.json does not set expo.web.output to "server".');
|
|
19
26
|
}
|
|
20
27
|
}
|
|
28
|
+
if (errors.length > 0) {
|
|
29
|
+
return {
|
|
30
|
+
name: 'expo configuration',
|
|
31
|
+
status: 'error',
|
|
32
|
+
message: 'Expo configuration has schema errors.',
|
|
33
|
+
details: { errors },
|
|
34
|
+
};
|
|
35
|
+
}
|
|
21
36
|
if (warnings.length > 0) {
|
|
22
37
|
return {
|
|
23
38
|
name: 'expo configuration',
|
|
@@ -48,4 +63,16 @@ async function readAppJson(projectPath) {
|
|
|
48
63
|
return null;
|
|
49
64
|
}
|
|
50
65
|
}
|
|
66
|
+
function readNestedStringArray(value, pathKeys) {
|
|
67
|
+
let current = value;
|
|
68
|
+
for (const key of pathKeys) {
|
|
69
|
+
if (!isRecord(current) || !(key in current)) {
|
|
70
|
+
return [];
|
|
71
|
+
}
|
|
72
|
+
current = current[key];
|
|
73
|
+
}
|
|
74
|
+
return Array.isArray(current)
|
|
75
|
+
? current.filter((item) => typeof item === 'string')
|
|
76
|
+
: [];
|
|
77
|
+
}
|
|
51
78
|
//# sourceMappingURL=expo-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expo-config.js","sourceRoot":"","sources":["../../src/checks/expo-config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEtF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,WAAwB,EACxB,WAAmB;IAEnB,MAAM,IAAI,GAAG;QACX,GAAG,WAAW,CAAC,YAAY;QAC3B,GAAG,WAAW,CAAC,eAAe;KAC/B,CAAC;IACF,MAAM,aAAa,GAAG,aAAa,IAAI,IAAI,CAAC;IAC5C,MAAM,QAAQ,GAAa,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"expo-config.js","sourceRoot":"","sources":["../../src/checks/expo-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seo-metadata.d.ts","sourceRoot":"","sources":["../../src/checks/seo-metadata.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"seo-metadata.d.ts","sourceRoot":"","sources":["../../src/checks/seo-metadata.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuDtF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
-
import { findFiles, pathExists, readOptionalText, SOURCE_EXTENSIONS } from '../utils.js';
|
|
2
|
+
import { findFiles, isRecord, pathExists, readOptionalText, SOURCE_EXTENSIONS } from '../utils.js';
|
|
3
3
|
export async function checkSeoMetadata(projectPath) {
|
|
4
4
|
const appDirs = [path.join(projectPath, 'app'), path.join(projectPath, 'src', 'app')];
|
|
5
5
|
const hasAppDir = await Promise.all(appDirs.map((appDir) => pathExists(appDir)));
|
|
@@ -10,6 +10,14 @@ export async function checkSeoMetadata(projectPath) {
|
|
|
10
10
|
message: 'No Expo Router app directory found.',
|
|
11
11
|
};
|
|
12
12
|
}
|
|
13
|
+
const targetsWeb = await projectTargetsWeb(projectPath);
|
|
14
|
+
if (!targetsWeb) {
|
|
15
|
+
return {
|
|
16
|
+
name: 'seo metadata',
|
|
17
|
+
status: 'skip',
|
|
18
|
+
message: 'Web is not a target platform for this app.',
|
|
19
|
+
};
|
|
20
|
+
}
|
|
13
21
|
const sourceFiles = await findFiles(projectPath, (filePath) => SOURCE_EXTENSIONS.has(path.extname(filePath)));
|
|
14
22
|
const searchableText = (await Promise.all(sourceFiles.slice(0, 500).map((filePath) => readOptionalText(filePath))))
|
|
15
23
|
.filter((value) => Boolean(value))
|
|
@@ -38,4 +46,30 @@ export async function checkSeoMetadata(projectPath) {
|
|
|
38
46
|
message: 'Basic web metadata signals are present.',
|
|
39
47
|
};
|
|
40
48
|
}
|
|
49
|
+
async function projectTargetsWeb(projectPath) {
|
|
50
|
+
const raw = await readOptionalText(path.join(projectPath, 'app.json'));
|
|
51
|
+
if (!raw) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
const parsed = JSON.parse(raw);
|
|
56
|
+
if (!isRecord(parsed)) {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
const expo = isRecord(parsed.expo) ? parsed.expo : null;
|
|
60
|
+
if (!expo) {
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
const platforms = Array.isArray(expo.platforms)
|
|
64
|
+
? expo.platforms.filter((item) => typeof item === 'string')
|
|
65
|
+
: [];
|
|
66
|
+
if (platforms.length === 0) {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
return platforms.includes('web');
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
41
75
|
//# sourceMappingURL=seo-metadata.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seo-metadata.js","sourceRoot":"","sources":["../../src/checks/seo-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"seo-metadata.js","sourceRoot":"","sources":["../../src/checks/seo-metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"todo-for-context.d.ts","sourceRoot":"","sources":["../../src/checks/todo-for-context.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAWrD,wBAAsB,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"todo-for-context.d.ts","sourceRoot":"","sources":["../../src/checks/todo-for-context.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAWrD,wBAAsB,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA0ChG"}
|
|
@@ -4,17 +4,7 @@ import { firstExistingPath } from '../utils.js';
|
|
|
4
4
|
const MARKER = '# TodoForContext(optional):';
|
|
5
5
|
export async function checkTodoForContextMarkers(projectPath) {
|
|
6
6
|
const projectDir = path.join(projectPath, 'project');
|
|
7
|
-
const candidates = [
|
|
8
|
-
{ label: 'project/info.md', paths: [path.join(projectDir, 'info.md')] },
|
|
9
|
-
{ label: 'project/style.md', paths: [path.join(projectDir, 'style.md')] },
|
|
10
|
-
{ label: 'project/guidelines.md', paths: [path.join(projectDir, 'guidelines.md')] },
|
|
11
|
-
{
|
|
12
|
-
label: 'project/todo.md',
|
|
13
|
-
paths: [path.join(projectDir, 'todo.md'), path.join(projectDir, 'TODO.md')],
|
|
14
|
-
},
|
|
15
|
-
{ label: 'project/intake-agent.md', paths: [path.join(projectDir, 'intake-agent.md')] },
|
|
16
|
-
{ label: 'project/release-flow.md', paths: [path.join(projectDir, 'release-flow.md')] },
|
|
17
|
-
];
|
|
7
|
+
const candidates = [{ label: 'project/info.md', paths: [path.join(projectDir, 'info.md')] }];
|
|
18
8
|
const hits = [];
|
|
19
9
|
for (const candidate of candidates) {
|
|
20
10
|
const filePath = await firstExistingPath(candidate.paths);
|
|
@@ -38,14 +28,14 @@ export async function checkTodoForContextMarkers(projectPath) {
|
|
|
38
28
|
return {
|
|
39
29
|
name: 'todo-for-context markers',
|
|
40
30
|
status: 'pass',
|
|
41
|
-
message: 'No unresolved # TodoForContext(optional): markers in project
|
|
31
|
+
message: 'No unresolved # TodoForContext(optional): markers in project/info.md.',
|
|
42
32
|
};
|
|
43
33
|
}
|
|
44
34
|
return {
|
|
45
35
|
name: 'todo-for-context markers',
|
|
46
36
|
status: 'error',
|
|
47
37
|
message: `${hits.length} unresolved # TodoForContext(optional): ${hits.length === 1 ? 'marker' : 'markers'} ` +
|
|
48
|
-
'
|
|
38
|
+
'in project/info.md block roadmap derivation and phase planning. Fill the section or delete the marker line.',
|
|
49
39
|
details: { hits },
|
|
50
40
|
};
|
|
51
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"todo-for-context.js","sourceRoot":"","sources":["../../src/checks/todo-for-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,MAAM,GAAG,6BAA6B,CAAC;AAQ7C,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,WAAmB;IAClE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG
|
|
1
|
+
{"version":3,"file":"todo-for-context.js","sourceRoot":"","sources":["../../src/checks/todo-for-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,MAAM,GAAG,6BAA6B,CAAC;AAQ7C,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,WAAmB;IAClE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IAE7F,MAAM,IAAI,GAAgB,EAAE,CAAC;IAE7B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,IAAI,CAAC,IAAI,CAAC;oBACR,IAAI,EAAE,SAAS,CAAC,KAAK;oBACrB,IAAI,EAAE,KAAK,GAAG,CAAC;oBACf,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;iBAClB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,IAAI,EAAE,0BAA0B;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,uEAAuE;SACjF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,0BAA0B;QAChC,MAAM,EAAE,OAAO;QACf,OAAO,EACL,GAAG,IAAI,CAAC,MAAM,2CAA2C,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,GAAG;YACpG,6GAA6G;QAC/G,OAAO,EAAE,EAAE,IAAI,EAAE;KAClB,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,OAAO,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,MAAM,EAAE,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;AAC9G,CAAC"}
|
package/dist/cli.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,54 +1,53 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@mr.dj2u/doctor",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Production Doctor: multi-check engine for Expo apps (lint, tsc, expo doctor, architecture)",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"bin": {
|
|
7
|
-
"mds-doctor": "dist/cli.js"
|
|
8
|
-
},
|
|
9
|
-
"files": [
|
|
10
|
-
"dist"
|
|
11
|
-
],
|
|
12
|
-
"exports": {
|
|
13
|
-
".": {
|
|
14
|
-
"import": "./dist/index.js",
|
|
15
|
-
"types": "./dist/index.d.ts"
|
|
16
|
-
},
|
|
17
|
-
"./checks": {
|
|
18
|
-
"import": "./dist/checks/index.js",
|
|
19
|
-
"types": "./dist/checks/index.d.ts"
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
|
-
"main": "./dist/index.js",
|
|
23
|
-
"types": "./dist/index.d.ts",
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@mr.dj2u/doctor",
|
|
3
|
+
"version": "0.1.3",
|
|
4
|
+
"description": "Production Doctor: multi-check engine for Expo apps (lint, tsc, expo doctor, architecture)",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"mds-doctor": "dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist"
|
|
11
|
+
],
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"import": "./dist/index.js",
|
|
15
|
+
"types": "./dist/index.d.ts"
|
|
16
|
+
},
|
|
17
|
+
"./checks": {
|
|
18
|
+
"import": "./dist/checks/index.js",
|
|
19
|
+
"types": "./dist/checks/index.d.ts"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"main": "./dist/index.js",
|
|
23
|
+
"types": "./dist/index.d.ts",
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"execa": "^6.1.0",
|
|
26
|
+
"json5": "^2.2.3"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@types/node": "^20.10.0",
|
|
30
|
+
"typescript": "^5.9.0"
|
|
31
|
+
},
|
|
32
|
+
"keywords": [
|
|
33
|
+
"expo",
|
|
34
|
+
"doctor",
|
|
35
|
+
"lint",
|
|
36
|
+
"typescript",
|
|
37
|
+
"quality"
|
|
38
|
+
],
|
|
39
|
+
"author": "DJ",
|
|
40
|
+
"license": "MIT",
|
|
41
|
+
"publishConfig": {
|
|
42
|
+
"access": "public"
|
|
43
|
+
},
|
|
44
|
+
"scripts": {
|
|
45
|
+
"build": "tsc",
|
|
46
|
+
"type-check": "tsc --noEmit",
|
|
47
|
+
"lint": "eslint src",
|
|
48
|
+
"lint:fix": "eslint src --fix",
|
|
49
|
+
"test": "vitest run --passWithNoTests",
|
|
50
|
+
"dev": "tsc --watch",
|
|
51
|
+
"clean": "node -e \"const fs=require('node:fs'); for (const p of ['dist','tsconfig.tsbuildinfo']) fs.rmSync(p,{recursive:true,force:true});\""
|
|
52
|
+
}
|
|
53
|
+
}
|