Просмотр исходного кода

Merge branch 'worktree/pr344-retarget-stack' into worktree/pr345-retarget-stack

Tianyi Cui 3 месяцев назад
Родитель
Сommit
d8f2531a55
3 измененных файлов с 56 добавлено и 4 удалено
  1. 36 0
      scripts/cordis-config-files.spec.ts
  2. 18 0
      scripts/cordis-config-files.ts
  3. 2 4
      scripts/verify-cordis-config.ts

+ 36 - 0
scripts/cordis-config-files.spec.ts

@@ -0,0 +1,36 @@
+import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'
+import { tmpdir } from 'node:os'
+import { join } from 'node:path'
+import { afterEach, describe, expect, it } from 'vitest'
+import { cordisConfigFiles } from './cordis-config-files.ts'
+
+const roots: string[] = []
+
+afterEach(() => {
+  for (const root of roots.splice(0)) rmSync(root, { recursive: true, force: true })
+})
+
+describe('cordisConfigFiles', () => {
+  it('finds Loader YAML without treating translation records as configs', () => {
+    const root = mkdtempSync(join(tmpdir(), 'dsh-cordis-config-files-'))
+    roots.push(root)
+    for (const directory of ['.claude', 'docs', 'examples', 'node_modules/pkg', 'vendor/pkg']) {
+      mkdirSync(join(root, directory), { recursive: true })
+    }
+    for (const file of [
+      '.claude/hidden.cordis.yml',
+      'docs/cordis-primer.i18n.yaml',
+      'examples/agent.cordis.yaml',
+      'examples/headless.cordis.yml',
+      'node_modules/pkg/hidden.cordis.yml',
+      'vendor/pkg/hidden.cordis.yml',
+    ]) {
+      writeFileSync(join(root, file), '[]\n')
+    }
+
+    expect(cordisConfigFiles(root)).toEqual([
+      'examples/agent.cordis.yaml',
+      'examples/headless.cordis.yml',
+    ])
+  })
+})

+ 18 - 0
scripts/cordis-config-files.ts

@@ -0,0 +1,18 @@
+/** Cordis Loader configuration file discovery. */
+
+import { globSync } from 'node:fs'
+
+/**
+ * Return repository-relative Cordis Loader YAML paths under `root`.
+ *
+ * Translation consistency records are YAML sidecars, never Loader inputs.
+ *
+ * @param root Repository root to scan.
+ * @returns Sorted repository-relative Loader configuration paths.
+ */
+export function cordisConfigFiles(root: string): string[] {
+  return globSync(['**/*cordis*.yml', '**/*cordis*.yaml'], {
+    cwd: root,
+    exclude: ['.claude/**', 'node_modules/**', 'vendor/**', '**/*.i18n.yaml'],
+  }).sort()
+}

+ 2 - 4
scripts/verify-cordis-config.ts

@@ -12,6 +12,7 @@ import { globSync, readFileSync } from 'node:fs'
 import { dirname, relative, resolve } from 'node:path'
 import { dirname, relative, resolve } from 'node:path'
 import * as yaml from 'js-yaml'
 import * as yaml from 'js-yaml'
 import ts from 'typescript'
 import ts from 'typescript'
+import { cordisConfigFiles } from './cordis-config-files.ts'
 
 
 interface JsExpr {
 interface JsExpr {
   __jsExpr: string
   __jsExpr: string
@@ -39,10 +40,7 @@ const jsExprType = new yaml.Type('tag:yaml.org,2002:js', {
 })
 })
 const schema = yaml.JSON_SCHEMA.extend(jsExprType)
 const schema = yaml.JSON_SCHEMA.extend(jsExprType)
 
 
-const files = globSync(['**/*cordis*.yml', '**/*cordis*.yaml'], {
-  cwd: root,
-  exclude: ['.claude/**', 'node_modules/**', 'vendor/**'],
-}).sort()
+const files = cordisConfigFiles(root)
 const errors: string[] = []
 const errors: string[] = []
 const examplePluginReferences: PluginReference[] = []
 const examplePluginReferences: PluginReference[] = []