@lssm/module.contractspec-workspace 0.0.0-canary-20251219202229 → 0.0.0-canary-20251220015515
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-scan.js","names":["refs: RefInfo[]","provides: RefInfo[]","requires: RefInfo[]","match: RegExpExecArray | null","links: { op: RefInfo; pres: RefInfo }[]"],"sources":["../../src/analysis/feature-scan.ts"],"sourcesContent":["/**\n * Feature file scanning utilities.\n *\n * Extracts FeatureModuleSpec metadata from source code without execution.\n */\n\nimport type { FeatureScanResult, RefInfo } from '../types/analysis-types';\nimport type { Stability } from '../types/spec-types';\n\n/**\n * Check if a file is a feature file based on naming conventions.\n */\nexport function isFeatureFile(filePath: string): boolean {\n return filePath.includes('.feature.');\n}\n\n/**\n * Scan a feature source file to extract metadata.\n */\nexport function scanFeatureSource(\n code: string,\n filePath: string\n): FeatureScanResult {\n const key = matchStringField(code, 'key') ?? extractKeyFromFilePath(filePath);\n const title = matchStringField(code, 'title') ?? undefined;\n const description = matchStringField(code, 'description') ?? undefined;\n const domain = matchStringField(code, 'domain') ?? undefined;\n const stabilityRaw = matchStringField(code, 'stability');\n const stability = isStability(stabilityRaw) ? stabilityRaw : undefined;\n const owners = matchStringArrayField(code, 'owners');\n const tags = matchStringArrayField(code, 'tags');\n\n // Extract operations\n const operations = extractRefsFromArray(code, 'operations');\n\n // Extract events\n const events = extractRefsFromArray(code, 'events');\n\n // Extract presentations\n const presentations = extractRefsFromArray(code, 'presentations');\n\n // Extract experiments\n const experiments = extractRefsFromArray(code, 'experiments');\n\n // Extract capabilities\n const capabilities = extractCapabilities(code);\n\n // Extract op to presentation links\n const opToPresentationLinks = extractOpToPresentationLinks(code);\n\n return {\n filePath,\n key,\n title,\n description,\n domain,\n stability,\n owners,\n tags,\n operations,\n events,\n presentations,\n experiments,\n capabilities,\n opToPresentationLinks,\n };\n}\n\n/**\n * Extract refs from a named array (e.g., operations, events, presentations).\n */\nfunction extractRefsFromArray(code: string, fieldName: string): RefInfo[] {\n const refs: RefInfo[] = [];\n\n // Match the array section\n const arrayPattern = new RegExp(\n `${escapeRegex(fieldName)}\\\\s*:\\\\s*\\\\[([\\\\s\\\\S]*?)\\\\]`,\n 'm'\n );\n const arrayMatch = code.match(arrayPattern);\n\n if (!arrayMatch?.[1]) return refs;\n\n // Extract each { name: 'x', version: N } entry\n const refPattern = /\\{\\s*name:\\s*['\"]([^'\"]+)['\"]\\s*,\\s*version:\\s*(\\d+)/g;\n let match;\n while ((match = refPattern.exec(arrayMatch[1])) !== null) {\n if (match[1] && match[2]) {\n refs.push({\n name: match[1],\n version: Number(match[2]),\n });\n }\n }\n\n return refs;\n}\n\n/**\n * Extract capability bindings (provides and requires).\n */\nfunction extractCapabilities(code: string): {\n provides: RefInfo[];\n requires: RefInfo[];\n} {\n const provides: RefInfo[] = [];\n const requires: RefInfo[] = [];\n\n // Match the capabilities section\n const capabilitiesMatch = code.match(/capabilities\\s*:\\s*\\{([\\s\\S]*?)\\}/);\n if (!capabilitiesMatch?.[1]) {\n return { provides, requires };\n }\n\n const capabilitiesContent = capabilitiesMatch[1];\n\n // Extract provides\n const providesMatch = capabilitiesContent.match(\n /provides\\s*:\\s*\\[([\\s\\S]*?)\\]/\n );\n if (providesMatch?.[1]) {\n const refPattern = /\\{\\s*key:\\s*['\"]([^'\"]+)['\"]\\s*,\\s*version:\\s*(\\d+)/g;\n let match;\n while ((match = refPattern.exec(providesMatch[1])) !== null) {\n if (match[1] && match[2]) {\n provides.push({\n name: match[1],\n version: Number(match[2]),\n });\n }\n }\n }\n\n // Extract requires\n const requiresMatch = capabilitiesContent.match(\n /requires\\s*:\\s*\\[([\\s\\S]*?)\\]/\n );\n if (requiresMatch?.[1]) {\n // Requires can have key+version or just key\n const refPatternWithVersion =\n /\\{\\s*key:\\s*['\"]([^'\"]+)['\"]\\s*,\\s*version:\\s*(\\d+)/g;\n const refPatternKeyOnly = /\\{\\s*key:\\s*['\"]([^'\"]+)['\"]\\s*\\}/g;\n\n let match: RegExpExecArray | null = null;\n while ((match = refPatternWithVersion.exec(requiresMatch[1])) !== null) {\n if (match[1] && match[2]) {\n requires.push({\n name: match[1],\n version: Number(match[2]),\n });\n }\n }\n\n // Also match key-only requires (version defaults to 1)\n while ((match = refPatternKeyOnly.exec(requiresMatch[1])) !== null) {\n if (match && match[1]) {\n // Check if we already added this with a version\n const alreadyExists = requires.some((r) => r.name === match![1]!);\n if (!alreadyExists) {\n requires.push({\n name: match[1],\n version: 1, // Default version\n });\n }\n }\n }\n }\n\n return { provides, requires };\n}\n\n/**\n * Extract opToPresentation links.\n */\nfunction extractOpToPresentationLinks(\n code: string\n): { op: RefInfo; pres: RefInfo }[] {\n const links: { op: RefInfo; pres: RefInfo }[] = [];\n\n // Match the opToPresentation array\n const arrayMatch = code.match(/opToPresentation\\s*:\\s*\\[([\\s\\S]*?)\\]/);\n if (!arrayMatch?.[1]) return links;\n\n // Match each link entry\n // Pattern: { op: { name: 'x', version: N }, pres: { name: 'y', version: M } }\n const linkPattern =\n /\\{\\s*op:\\s*\\{\\s*name:\\s*['\"]([^'\"]+)['\"]\\s*,\\s*version:\\s*(\\d+)\\s*\\}\\s*,\\s*pres:\\s*\\{\\s*name:\\s*['\"]([^'\"]+)['\"]\\s*,\\s*version:\\s*(\\d+)\\s*\\}/g;\n\n let match;\n while ((match = linkPattern.exec(arrayMatch[1])) !== null) {\n if (match[1] && match[2] && match[3] && match[4]) {\n links.push({\n op: { name: match[1], version: Number(match[2]) },\n pres: { name: match[3], version: Number(match[4]) },\n });\n }\n }\n\n return links;\n}\n\n/**\n * Extract key from file path as fallback.\n */\nfunction extractKeyFromFilePath(filePath: string): string {\n const fileName = filePath.split('/').pop() ?? filePath;\n return fileName\n .replace(/\\.feature\\.[jt]s$/, '')\n .replace(/[^a-zA-Z0-9-]/g, '-');\n}\n\n/**\n * Match a string field in source code.\n */\nfunction matchStringField(code: string, field: string): string | null {\n const regex = new RegExp(`${escapeRegex(field)}\\\\s*:\\\\s*['\"]([^'\"]+)['\"]`);\n const match = code.match(regex);\n return match?.[1] ?? null;\n}\n\n/**\n * Match a string array field in source code.\n */\nfunction matchStringArrayField(\n code: string,\n field: string\n): string[] | undefined {\n const regex = new RegExp(`${escapeRegex(field)}\\\\s*:\\\\s*\\\\[([\\\\s\\\\S]*?)\\\\]`);\n const match = code.match(regex);\n if (!match?.[1]) return undefined;\n\n const inner = match[1];\n const items = Array.from(inner.matchAll(/['\"]([^'\"]+)['\"]/g))\n .map((m) => m[1])\n .filter(\n (value): value is string => typeof value === 'string' && value.length > 0\n );\n\n return items.length > 0 ? items : undefined;\n}\n\n/**\n * Check if a value is a valid stability.\n */\nfunction isStability(value: string | null): value is Stability {\n return (\n value === 'experimental' ||\n value === 'beta' ||\n value === 'stable' ||\n value === 'deprecated'\n );\n}\n\n/**\n * Escape regex special characters.\n */\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"feature-scan.js","names":["refs: RefInfo[]","provides: RefInfo[]","requires: RefInfo[]","match: RegExpExecArray | null","links: { op: RefInfo; pres: RefInfo }[]"],"sources":["../../src/analysis/feature-scan.ts"],"sourcesContent":["/**\n * Feature file scanning utilities.\n *\n * Extracts FeatureModuleSpec metadata from source code without execution.\n */\n\nimport type { FeatureScanResult, RefInfo } from '../types/analysis-types';\nimport type { Stability } from '../types/spec-types';\n\n/**\n * Check if a file is a feature file based on naming conventions.\n */\nexport function isFeatureFile(filePath: string): boolean {\n return filePath.includes('.feature.');\n}\n\n/**\n * Scan a feature source file to extract metadata.\n */\nexport function scanFeatureSource(\n code: string,\n filePath: string\n): FeatureScanResult {\n const key = matchStringField(code, 'key') ?? extractKeyFromFilePath(filePath);\n const title = matchStringField(code, 'title') ?? undefined;\n const description = matchStringField(code, 'description') ?? undefined;\n const domain = matchStringField(code, 'domain') ?? undefined;\n const stabilityRaw = matchStringField(code, 'stability');\n const stability = isStability(stabilityRaw) ? stabilityRaw : undefined;\n const owners = matchStringArrayField(code, 'owners');\n const tags = matchStringArrayField(code, 'tags');\n\n // Extract operations\n const operations = extractRefsFromArray(code, 'operations');\n\n // Extract events\n const events = extractRefsFromArray(code, 'events');\n\n // Extract presentations\n const presentations = extractRefsFromArray(code, 'presentations');\n\n // Extract experiments\n const experiments = extractRefsFromArray(code, 'experiments');\n\n // Extract capabilities\n const capabilities = extractCapabilities(code);\n\n // Extract op to presentation links\n const opToPresentationLinks = extractOpToPresentationLinks(code);\n\n return {\n filePath,\n key,\n title,\n description,\n domain,\n stability,\n owners,\n tags,\n operations,\n events,\n presentations,\n experiments,\n capabilities,\n opToPresentationLinks,\n };\n}\n\n/**\n * Extract refs from a named array (e.g., operations, events, presentations).\n */\nfunction extractRefsFromArray(code: string, fieldName: string): RefInfo[] {\n const refs: RefInfo[] = [];\n\n // Match the array section\n const arrayPattern = new RegExp(\n `${escapeRegex(fieldName)}\\\\s*:\\\\s*\\\\[([\\\\s\\\\S]*?)\\\\]`,\n 'm'\n );\n const arrayMatch = code.match(arrayPattern);\n\n if (!arrayMatch?.[1]) return refs;\n\n // Extract each { name: 'x', version: N } entry\n const refPattern = /\\{\\s*name:\\s*['\"]([^'\"]+)['\"]\\s*,\\s*version:\\s*(\\d+)/g;\n let match;\n while ((match = refPattern.exec(arrayMatch[1])) !== null) {\n if (match[1] && match[2]) {\n refs.push({\n name: match[1],\n version: Number(match[2]),\n });\n }\n }\n\n return refs;\n}\n\n/**\n * Extract capability bindings (provides and requires).\n */\nfunction extractCapabilities(code: string): {\n provides: RefInfo[];\n requires: RefInfo[];\n} {\n const provides: RefInfo[] = [];\n const requires: RefInfo[] = [];\n\n // Match the capabilities section\n const capabilitiesMatch = code.match(/capabilities\\s*:\\s*\\{([\\s\\S]*?)\\}/);\n if (!capabilitiesMatch?.[1]) {\n return { provides, requires };\n }\n\n const capabilitiesContent = capabilitiesMatch[1];\n\n // Extract provides\n const providesMatch = capabilitiesContent.match(\n /provides\\s*:\\s*\\[([\\s\\S]*?)\\]/\n );\n if (providesMatch?.[1]) {\n const refPattern = /\\{\\s*key:\\s*['\"]([^'\"]+)['\"]\\s*,\\s*version:\\s*(\\d+)/g;\n let match;\n while ((match = refPattern.exec(providesMatch[1])) !== null) {\n if (match[1] && match[2]) {\n provides.push({\n name: match[1],\n version: Number(match[2]),\n });\n }\n }\n }\n\n // Extract requires\n const requiresMatch = capabilitiesContent.match(\n /requires\\s*:\\s*\\[([\\s\\S]*?)\\]/\n );\n if (requiresMatch?.[1]) {\n // Requires can have key+version or just key\n const refPatternWithVersion =\n /\\{\\s*key:\\s*['\"]([^'\"]+)['\"]\\s*,\\s*version:\\s*(\\d+)/g;\n const refPatternKeyOnly = /\\{\\s*key:\\s*['\"]([^'\"]+)['\"]\\s*\\}/g;\n\n let match: RegExpExecArray | null = null;\n while ((match = refPatternWithVersion.exec(requiresMatch[1])) !== null) {\n if (match[1] && match[2]) {\n requires.push({\n name: match[1],\n version: Number(match[2]),\n });\n }\n }\n\n // Also match key-only requires (version defaults to 1)\n while ((match = refPatternKeyOnly.exec(requiresMatch[1])) !== null) {\n if (match && match[1]) {\n // Check if we already added this with a version\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const alreadyExists = requires.some((r) => r.name === match![1]);\n if (!alreadyExists) {\n requires.push({\n name: match[1],\n version: 1, // Default version\n });\n }\n }\n }\n }\n\n return { provides, requires };\n}\n\n/**\n * Extract opToPresentation links.\n */\nfunction extractOpToPresentationLinks(\n code: string\n): { op: RefInfo; pres: RefInfo }[] {\n const links: { op: RefInfo; pres: RefInfo }[] = [];\n\n // Match the opToPresentation array\n const arrayMatch = code.match(/opToPresentation\\s*:\\s*\\[([\\s\\S]*?)\\]/);\n if (!arrayMatch?.[1]) return links;\n\n // Match each link entry\n // Pattern: { op: { name: 'x', version: N }, pres: { name: 'y', version: M } }\n const linkPattern =\n /\\{\\s*op:\\s*\\{\\s*name:\\s*['\"]([^'\"]+)['\"]\\s*,\\s*version:\\s*(\\d+)\\s*\\}\\s*,\\s*pres:\\s*\\{\\s*name:\\s*['\"]([^'\"]+)['\"]\\s*,\\s*version:\\s*(\\d+)\\s*\\}/g;\n\n let match;\n while ((match = linkPattern.exec(arrayMatch[1])) !== null) {\n if (match[1] && match[2] && match[3] && match[4]) {\n links.push({\n op: { name: match[1], version: Number(match[2]) },\n pres: { name: match[3], version: Number(match[4]) },\n });\n }\n }\n\n return links;\n}\n\n/**\n * Extract key from file path as fallback.\n */\nfunction extractKeyFromFilePath(filePath: string): string {\n const fileName = filePath.split('/').pop() ?? filePath;\n return fileName\n .replace(/\\.feature\\.[jt]s$/, '')\n .replace(/[^a-zA-Z0-9-]/g, '-');\n}\n\n/**\n * Match a string field in source code.\n */\nfunction matchStringField(code: string, field: string): string | null {\n const regex = new RegExp(`${escapeRegex(field)}\\\\s*:\\\\s*['\"]([^'\"]+)['\"]`);\n const match = code.match(regex);\n return match?.[1] ?? null;\n}\n\n/**\n * Match a string array field in source code.\n */\nfunction matchStringArrayField(\n code: string,\n field: string\n): string[] | undefined {\n const regex = new RegExp(`${escapeRegex(field)}\\\\s*:\\\\s*\\\\[([\\\\s\\\\S]*?)\\\\]`);\n const match = code.match(regex);\n if (!match?.[1]) return undefined;\n\n const inner = match[1];\n const items = Array.from(inner.matchAll(/['\"]([^'\"]+)['\"]/g))\n .map((m) => m[1])\n .filter(\n (value): value is string => typeof value === 'string' && value.length > 0\n );\n\n return items.length > 0 ? items : undefined;\n}\n\n/**\n * Check if a value is a valid stability.\n */\nfunction isStability(value: string | null): value is Stability {\n return (\n value === 'experimental' ||\n value === 'beta' ||\n value === 'stable' ||\n value === 'deprecated'\n );\n}\n\n/**\n * Escape regex special characters.\n */\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lssm/module.contractspec-workspace",
|
|
3
|
-
"version": "0.0.0-canary-
|
|
3
|
+
"version": "0.0.0-canary-20251220015515",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -23,13 +23,13 @@
|
|
|
23
23
|
"test": "bun run"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@lssm/lib.contracts": "0.0.0-canary-
|
|
27
|
-
"@lssm/lib.schema": "0.0.0-canary-
|
|
26
|
+
"@lssm/lib.contracts": "0.0.0-canary-20251220015515",
|
|
27
|
+
"@lssm/lib.schema": "0.0.0-canary-20251220015515",
|
|
28
28
|
"zod": "^4.1.13"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
|
-
"@lssm/tool.tsdown": "0.0.0-canary-
|
|
32
|
-
"@lssm/tool.typescript": "0.0.0-canary-
|
|
31
|
+
"@lssm/tool.tsdown": "0.0.0-canary-20251220015515",
|
|
32
|
+
"@lssm/tool.typescript": "0.0.0-canary-20251220015515",
|
|
33
33
|
"tsdown": "^0.18.1",
|
|
34
34
|
"typescript": "^5.9.3"
|
|
35
35
|
},
|
|
@@ -42,7 +42,13 @@
|
|
|
42
42
|
"exports": {
|
|
43
43
|
".": "./dist/index.js",
|
|
44
44
|
"./*": "./*"
|
|
45
|
-
}
|
|
45
|
+
},
|
|
46
|
+
"registry": "https://registry.npmjs.org/"
|
|
46
47
|
},
|
|
47
|
-
"license": "MIT"
|
|
48
|
+
"license": "MIT",
|
|
49
|
+
"repository": {
|
|
50
|
+
"type": "git",
|
|
51
|
+
"url": "https://github.com/lssm-tech/contractspec.git",
|
|
52
|
+
"directory": "packages/modules/contractspec-workspace"
|
|
53
|
+
}
|
|
48
54
|
}
|