@codeyam/codeyam-cli 0.1.25 → 0.1.26
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/analyzer-template/.build-info.json +6 -6
- package/analyzer-template/log.txt +3 -3
- package/codeyam-cli/src/commands/editor.js +31 -8
- package/codeyam-cli/src/commands/editor.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +10 -0
- package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/testRunner.test.js +0 -1
- package/codeyam-cli/src/utils/__tests__/testRunner.test.js.map +1 -1
- package/codeyam-cli/src/utils/editorAudit.js +22 -5
- package/codeyam-cli/src/utils/editorAudit.js.map +1 -1
- package/codeyam-cli/src/utils/testRunner.js +1 -7
- package/codeyam-cli/src/utils/testRunner.js.map +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/editor.entity.(_sha)-CRxPi2BB.js +96 -0
- package/codeyam-cli/src/webserver/build/client/assets/globals-BsGHu8WX.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{manifest-7e749098.js → manifest-9032538f.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{root-DGtly3mb.js → root-dKFRTYcy.js} +5 -5
- package/codeyam-cli/src/webserver/build/server/assets/{analysisRunner-CO8xocj3.js → analysisRunner-B6HnVI5u.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/{index-QKPqlUgg.js → index-rV_xLS1u.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/{init-DlspChIk.js → init-BdWDvetv.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/{server-build-ChzicV-B.js → server-build-B_jdq5dT.js} +120 -120
- package/codeyam-cli/src/webserver/build/server/index.js +1 -1
- package/codeyam-cli/src/webserver/build-info.json +5 -5
- package/codeyam-cli/templates/expo-react-native/MOBILE_SETUP.md +4 -5
- package/codeyam-cli/templates/expo-react-native/app/index.tsx +36 -0
- package/package.json +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/editor.entity.(_sha)-DLM1-ZMt.js +0 -96
- package/codeyam-cli/src/webserver/build/client/assets/globals-9EkC9j9I.css +0 -1
- package/codeyam-cli/templates/expo-react-native/app/(tabs)/_layout.tsx +0 -33
- package/codeyam-cli/templates/expo-react-native/app/(tabs)/index.tsx +0 -12
- package/codeyam-cli/templates/expo-react-native/app/(tabs)/settings.tsx +0 -12
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
"buildTimestamp": "2026-03-
|
|
3
|
-
"buildTime":
|
|
4
|
-
"gitCommit": "
|
|
2
|
+
"buildTimestamp": "2026-03-27T20:00:52.922Z",
|
|
3
|
+
"buildTime": 1774641652922,
|
|
4
|
+
"gitCommit": "2a3a412834b1cc8d46883263d3695bd29b8157dc",
|
|
5
5
|
"nodeVersion": "v20.20.1",
|
|
6
6
|
"contentHash": "c92230c027acb71cab56d2a696876a6a52206bfadd59fbc31a512b00a7ee8826",
|
|
7
|
-
"buildNumber":
|
|
8
|
-
"semanticVersion": "0.1.
|
|
9
|
-
"version": "0.1.
|
|
7
|
+
"buildNumber": 1262,
|
|
8
|
+
"semanticVersion": "0.1.1262",
|
|
9
|
+
"version": "0.1.1262 (2026-03-27T20:00+c92230c)"
|
|
10
10
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
|
-
[3/27/2026,
|
|
3
|
-
[3/27/2026,
|
|
2
|
+
[3/27/2026, 8:00:52 PM] > codeyam-combo@1.0.0 mergeDependencies
|
|
3
|
+
[3/27/2026, 8:00:52 PM] > node ./scripts/mergePackageJsonFiles.cjs
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
[3/27/2026,
|
|
6
|
+
[3/27/2026, 8:00:52 PM] Merged dependencies into root package.json
|
|
7
7
|
|
|
@@ -305,6 +305,10 @@ function printAppScenarioInstructions(pageName, route) {
|
|
|
305
305
|
console.log(chalk.dim(' Example: "Page - Full Data", "Page - Empty State", "Page - Error State"'));
|
|
306
306
|
}
|
|
307
307
|
console.log();
|
|
308
|
+
checkbox('Ensure every page file used in app scenarios has a glossary entry with its filePath:');
|
|
309
|
+
console.log(chalk.dim(' The register command validates pageFilePath against the glossary — add missing pages now.'));
|
|
310
|
+
console.log(chalk.dim(' Example: {"name":"CounterScreen","filePath":"app/(tabs)/index.tsx","type":"page","description":"Main counter page"}'));
|
|
311
|
+
console.log();
|
|
308
312
|
checkbox('Register each scenario with type "application", the real page URL, and pageFilePath:');
|
|
309
313
|
console.log(chalk.dim(` codeyam editor register '{"name":"${pageName || 'Page'} - Full Data",`));
|
|
310
314
|
console.log(chalk.dim(` "type":"application","url":"${route || '/'}","pageFilePath":"src/path/to/Page.tsx",...}'`));
|
|
@@ -402,9 +406,15 @@ function printExtractionPlanInstructions() {
|
|
|
402
406
|
function printComponentCaptureInstructions(root) {
|
|
403
407
|
const ctx = root ? getTechStackContext(root) : undefined;
|
|
404
408
|
const isExpo = ctx?.isExpo ?? false;
|
|
405
|
-
checkbox('
|
|
406
|
-
|
|
407
|
-
|
|
409
|
+
checkbox('Set up isolation routes: `codeyam editor isolate ComponentA ComponentB ...`');
|
|
410
|
+
if (isExpo) {
|
|
411
|
+
console.log(chalk.dim(' This creates app/isolated-components/_layout.tsx (with __DEV__ guard).'));
|
|
412
|
+
console.log(chalk.dim(' You then create a flat .tsx file per component (NOT subdirectories — Expo Router uses flat files).'));
|
|
413
|
+
}
|
|
414
|
+
else {
|
|
415
|
+
console.log(chalk.dim(` This creates app/isolated-components/layout.tsx (with notFound() guard) and`));
|
|
416
|
+
console.log(chalk.dim(' a directory per component. List ALL components that need isolation routes.'));
|
|
417
|
+
}
|
|
408
418
|
checkbox('For each visual component:');
|
|
409
419
|
console.log(chalk.dim(' 1. Read the source AND find where it is used in the app to understand:'));
|
|
410
420
|
console.log(chalk.dim(' — Props/interface'));
|
|
@@ -805,8 +815,8 @@ function printSetup(root) {
|
|
|
805
815
|
console.log(chalk.bold('Tech Stack Selection:'));
|
|
806
816
|
console.log(chalk.dim(' Based on the selected formats, present ONLY the matching tech stacks.'));
|
|
807
817
|
console.log(chalk.dim(' A stack matches if ANY of the user\'s selected formats appears in its "Supports" list.'));
|
|
808
|
-
console.log(chalk.dim('
|
|
809
|
-
console.log(chalk.dim('
|
|
818
|
+
console.log(chalk.dim(' If only ONE stack matches, confirm it directly (e.g. "Expo + React Native is the only stack for mobile apps — using that.").'));
|
|
819
|
+
console.log(chalk.dim(' If MULTIPLE stacks match, use AskUserQuestion to let the user pick one.'));
|
|
810
820
|
console.log();
|
|
811
821
|
console.log(chalk.bold(' Available Tech Stacks:'));
|
|
812
822
|
for (const stack of TECH_STACKS) {
|
|
@@ -1409,6 +1419,7 @@ function printStep7(root, feature) {
|
|
|
1409
1419
|
console.log(chalk.dim(' Cover: typical inputs, edge cases, empty/null inputs, error conditions'));
|
|
1410
1420
|
console.log(chalk.dim(' Aim for 3-8 test cases per function depending on complexity'));
|
|
1411
1421
|
console.log(chalk.dim(' Hooks count as functions — useDrinks, useAuth, etc. all need test files'));
|
|
1422
|
+
console.log(chalk.dim(' Wrap all tests in a describe("FunctionName", ...) block — the audit matches on this name'));
|
|
1412
1423
|
if (ctx.isExpo) {
|
|
1413
1424
|
checkbox('Place test files next to source but OUTSIDE `app/` (Expo Router treats all files in app/ as routes): `lib/storage.ts` → `lib/storage.test.ts`, `app/hooks/useCounter.ts` → `__tests__/hooks/useCounter.test.ts`');
|
|
1414
1425
|
}
|
|
@@ -2884,8 +2895,13 @@ function handleIsolate(componentNames) {
|
|
|
2884
2895
|
process.exit(1);
|
|
2885
2896
|
}
|
|
2886
2897
|
const isolateDir = path.join(root, 'app', 'isolated-components');
|
|
2887
|
-
// Create
|
|
2898
|
+
// Create the framework-appropriate layout guard if missing.
|
|
2899
|
+
// Clean up wrong-framework layout from a previous CLI version.
|
|
2888
2900
|
const layoutPath = path.join(isolateDir, ctx.isExpo ? '_layout.tsx' : 'layout.tsx');
|
|
2901
|
+
const wrongLayoutPath = path.join(isolateDir, ctx.isExpo ? 'layout.tsx' : '_layout.tsx');
|
|
2902
|
+
if (fs.existsSync(wrongLayoutPath)) {
|
|
2903
|
+
fs.unlinkSync(wrongLayoutPath);
|
|
2904
|
+
}
|
|
2889
2905
|
if (!fs.existsSync(layoutPath)) {
|
|
2890
2906
|
fs.mkdirSync(isolateDir, { recursive: true });
|
|
2891
2907
|
if (ctx.isExpo) {
|
|
@@ -2938,7 +2954,13 @@ function handleIsolate(componentNames) {
|
|
|
2938
2954
|
}
|
|
2939
2955
|
}
|
|
2940
2956
|
if (created.length > 0) {
|
|
2941
|
-
|
|
2957
|
+
if (ctx.isExpo) {
|
|
2958
|
+
console.log(chalk.green(`Ready for ${created.length} isolation route(s): ${created.map((n) => `app/isolated-components/${n}.tsx`).join(', ')}`));
|
|
2959
|
+
console.log(chalk.dim(' Create each file with useLocalSearchParams, a scenarios map, and nativeID="codeyam-capture"'));
|
|
2960
|
+
}
|
|
2961
|
+
else {
|
|
2962
|
+
console.log(chalk.green(`Created ${created.length} isolation route dir(s): ${created.join(', ')}`));
|
|
2963
|
+
}
|
|
2942
2964
|
}
|
|
2943
2965
|
if (existed.length > 0) {
|
|
2944
2966
|
console.log(chalk.dim(`Already existed: ${existed.join(', ')}`));
|
|
@@ -3954,7 +3976,8 @@ async function handleAudit(options) {
|
|
|
3954
3976
|
if (f.errorMessage) {
|
|
3955
3977
|
detail += `\n ${chalk.red(f.errorMessage)}`;
|
|
3956
3978
|
detail += `\n ${chalk.yellow('Note: This is NOT a test failure — the test runner itself could not execute.')}`;
|
|
3957
|
-
|
|
3979
|
+
const ctx = getTechStackContext(process.cwd());
|
|
3980
|
+
detail += `\n ${chalk.yellow('Try running the test manually: ' + ctx.testRunCommand + ' ' + f.testFile)}`;
|
|
3958
3981
|
}
|
|
3959
3982
|
break;
|
|
3960
3983
|
case 'failing':
|