@thanh01.pmt/domain-kit 0.1.0 → 0.2.0
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/LICENSE +21 -0
- package/dist/chunk-7XGWW6CB.mjs +3 -0
- package/dist/{chunk-F4RZNBOE.mjs.map → chunk-7XGWW6CB.mjs.map} +1 -1
- package/dist/{chunk-VFART56O.mjs → chunk-BL5NBKPH.mjs} +12 -8
- package/dist/chunk-BL5NBKPH.mjs.map +1 -0
- package/dist/chunk-IJZUV7N3.mjs +3 -0
- package/dist/chunk-IJZUV7N3.mjs.map +1 -0
- package/dist/{chunk-3VVPSRAM.mjs → chunk-JE57VFWX.mjs} +1056 -92
- package/dist/chunk-JE57VFWX.mjs.map +1 -0
- package/dist/{chunk-GEUDHZE7.mjs → chunk-KPZKPNOJ.mjs} +173 -4
- package/dist/chunk-KPZKPNOJ.mjs.map +1 -0
- package/dist/chunk-R57WTNXW.mjs +3 -0
- package/dist/chunk-R57WTNXW.mjs.map +1 -0
- package/dist/{chunk-3H2HX7PR.mjs → chunk-RAR5MUUK.mjs} +57 -7
- package/dist/chunk-RAR5MUUK.mjs.map +1 -0
- package/dist/chunk-T4Y2DE2W.mjs +187 -0
- package/dist/chunk-T4Y2DE2W.mjs.map +1 -0
- package/dist/{chunk-PM42MMDJ.mjs → chunk-WHBAGJWN.mjs} +48 -3
- package/dist/chunk-WHBAGJWN.mjs.map +1 -0
- package/dist/chunk-ZKLT27T4.mjs +3 -0
- package/dist/chunk-ZKLT27T4.mjs.map +1 -0
- package/dist/concepts/index.d.cts +2 -2
- package/dist/concepts/index.d.ts +2 -2
- package/dist/cpp-CZUPqJt9.d.cts +98 -0
- package/dist/cpp-CZUPqJt9.d.ts +98 -0
- package/dist/curriculumFeedEmitter-UG664SWY.mjs +4 -0
- package/dist/curriculumFeedEmitter-UG664SWY.mjs.map +1 -0
- package/dist/detector/index.cjs +10 -6
- package/dist/detector/index.cjs.map +1 -1
- package/dist/detector/index.d.cts +4 -19
- package/dist/detector/index.d.ts +4 -19
- package/dist/detector/index.mjs +2 -1
- package/dist/domainProfileDetector-DHb1T0zB.d.ts +22 -0
- package/dist/domainProfileDetector-bzugdQmS.d.cts +22 -0
- package/dist/extractors/index.d.cts +3 -3
- package/dist/extractors/index.d.ts +3 -3
- package/dist/feed/index.cjs +55 -5
- package/dist/feed/index.cjs.map +1 -1
- package/dist/feed/index.mjs +2 -1
- package/dist/graph/index.cjs +368 -64
- package/dist/graph/index.cjs.map +1 -1
- package/dist/graph/index.d.cts +7 -67
- package/dist/graph/index.d.ts +7 -67
- package/dist/graph/index.mjs +3 -2
- package/dist/hybridGraphPipeline-DVZYLCAQ.d.ts +159 -0
- package/dist/hybridGraphPipeline-DmWRKYXf.d.cts +159 -0
- package/dist/index.cjs +1300 -697
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -7
- package/dist/index.d.ts +9 -7
- package/dist/index.mjs +10 -7
- package/dist/{keywordExtractor-zPAz2isq.d.cts → keywordExtractor-BxlGRMHC.d.cts} +1 -1
- package/dist/{keywordExtractor-CKaXqSku.d.ts → keywordExtractor-DU5XRN8-.d.ts} +1 -1
- package/dist/parsers/index.cjs +185 -0
- package/dist/parsers/index.cjs.map +1 -1
- package/dist/parsers/index.d.cts +2 -98
- package/dist/parsers/index.d.ts +2 -98
- package/dist/parsers/index.mjs +2 -1
- package/dist/pipeline/index.cjs +3140 -6
- package/dist/pipeline/index.cjs.map +1 -1
- package/dist/pipeline/index.d.cts +87 -4
- package/dist/pipeline/index.d.ts +87 -4
- package/dist/pipeline/index.mjs +6 -2
- package/dist/schemas/index.cjs +51 -0
- package/dist/schemas/index.cjs.map +1 -1
- package/dist/schemas/index.d.cts +222 -3
- package/dist/schemas/index.d.ts +222 -3
- package/dist/schemas/index.mjs +1 -1
- package/dist/syllabusParser-MSX1fEzW.d.cts +40 -0
- package/dist/syllabusParser-MSX1fEzW.d.ts +40 -0
- package/package.json +9 -10
- package/dist/chunk-3H2HX7PR.mjs.map +0 -1
- package/dist/chunk-3VVPSRAM.mjs.map +0 -1
- package/dist/chunk-F4RZNBOE.mjs +0 -3
- package/dist/chunk-GEUDHZE7.mjs.map +0 -1
- package/dist/chunk-MOKNFLUD.mjs +0 -851
- package/dist/chunk-MOKNFLUD.mjs.map +0 -1
- package/dist/chunk-PM42MMDJ.mjs.map +0 -1
- package/dist/chunk-VFART56O.mjs.map +0 -1
- package/dist/graphVerifier-DsTP9uAN.d.ts +0 -37
- package/dist/graphVerifier-QjgDAJce.d.cts +0 -37
package/dist/index.d.cts
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
export { i as ArchEdgeSchema, A as ArchNodeSchema, x as ArchitectureDetail, j as ArchitectureDetailSchema, w as Capability, C as CapabilitySchema, z as DataIntegration, m as DataIntegrationSchema, G as Decomposition, s as DecompositionSchema, D as DevelopmentStageSchema, y as Experience, E as ExperienceComponentSchema, l as ExperienceSchema, d as Feature, F as FeatureSchema, B as Implementation, I as ImplementationSchema, e as JourneySchema, J as JourneyStepSchema, r as MilestoneDecompositionSchema, M as MissingGapSchema, N as NavigationSchema, v as Product, P as ProductGoalSchema, g as ProductSchema, f as ProductUserSchema, u as ProjectGraph, t as ProjectGraphSchema, h as ProjectInfoSchema, R as RequirementSchema, k as ScreenSchema, c as Step, S as StepEffortSchema, a as StepOutcomeSchema, b as StepSchema, n as TaskEffortSchema, o as TaskOutcomeSchema, p as TaskSchema, q as TechDebtSchema, T as TechStackSchema, U as UiStateSchema } from './projectGraphSchema-DnD7orZV.cjs';
|
|
2
2
|
export { b as Concept, d as ConceptCategory, c as ConceptCategorySchema, m as ConceptIntroduction, i as ConceptIntroductionSchema, C as ConceptSchema, l as DevelopmentPhase, D as DevelopmentPhaseSchema, j as HybridGraph, H as HybridGraphSchema, g as KnowledgeGraph, K as KnowledgeGraphSchema, f as LearningPathStep, L as LearningPathStepSchema, a as ProblemType, P as ProblemTypeSchema, k as ProjectConceptLink, h as ProjectConceptLinkSchema, e as SubjectInfo, S as SubjectInfoSchema } from './hybridGraphSchema-BCgXicgA.cjs';
|
|
3
|
-
export { HardwareFeatureExtensionSchema, HardwareStepSchema, HardwareTaskExtensionSchema, HardwareTechStackExtensionSchema, ShapeSchema, ThreeDesignFeatureExtensionSchema, ThreeDesignTaskExtensionSchema, ThreeDesignTechStackExtensionSchema, WiringSchema } from './schemas/index.cjs';
|
|
3
|
+
export { ExperimentProcedureSchema, GrammarRuleSchema, HardwareFeatureExtensionSchema, HardwareStepSchema, HardwareTaskExtensionSchema, HardwareTechStackExtensionSchema, LanguageConceptExtension, LanguageConceptExtensionSchema, MathConceptExtension, MathConceptExtensionSchema, MathTheoremSchema, ScienceConceptExtension, ScienceConceptExtensionSchema, ShapeSchema, ThreeDesignFeatureExtensionSchema, ThreeDesignTaskExtensionSchema, ThreeDesignTechStackExtensionSchema, WiringSchema } from './schemas/index.cjs';
|
|
4
4
|
export { a as DetectionConfidenceSchema, e as DomainCategory, D as DomainCategorySchema, c as DomainProfile, b as DomainProfileSchema, g as GraphType, G as GraphTypeSchema, d as InputType, I as InputTypeSchema, f as LearningMode, L as LearningModeSchema } from './domainProfileSchema-CwT3Ffsw.cjs';
|
|
5
5
|
export { g as CurriculumFeed, C as CurriculumFeedSchema, i as FeedEdge, c as FeedEdgeSchema, j as FeedGrouping, d as FeedGroupingSchema, F as FeedKeywordsSchema, h as FeedNode, b as FeedNodeSchema, f as FeedPhase, e as FeedPhaseSchema, a as FeedScaffoldCandidateSchema, v as validateCurriculumFeed } from './curriculumFeedSchema-TEeQg2bY.cjs';
|
|
6
|
-
export { CppParseResult, PythonParseResult, SwiftParseResult, TsParseResult, mergeCppResults, mergePythonResults, mergeSwiftResults, mergeTsResults, parseCppFile, parsePythonFile, parseSwiftFile, parseTsFile } from './
|
|
7
|
-
export {
|
|
6
|
+
export { C as CppParseResult, P as PythonParseResult, S as SwiftParseResult, T as TsParseResult, f as mergeCppResults, d as mergePythonResults, m as mergeSwiftResults, b as mergeTsResults, e as parseCppFile, c as parsePythonFile, p as parseSwiftFile, a as parseTsFile } from './cpp-CZUPqJt9.cjs';
|
|
7
|
+
export { P as ParsedSyllabus, a as SyllabusTopic, S as SyllabusUnit, p as parseSyllabus } from './syllabusParser-MSX1fEzW.cjs';
|
|
8
|
+
export { K as Keyword, S as SourceContext, e as extractKeywords } from './keywordExtractor-BxlGRMHC.cjs';
|
|
8
9
|
export { FileRelevanceScore, scoreByContent, scoreByPath, scoreFiles, selectRelevantFiles } from './extractors/index.cjs';
|
|
9
|
-
export { DetectDomainOptions,
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
10
|
+
export { DetectDomainOptions, DetectInputTypeOptions, DetectLearningModeOptions, DomainDetectionResult, InputTypeDetectionResult, LearningModeDetectionResult, detectDomain, detectInputType, detectLearningMode } from './detector/index.cjs';
|
|
11
|
+
export { D as DetectDomainProfileOptions, d as detectDomainProfile } from './domainProfileDetector-bzugdQmS.cjs';
|
|
12
|
+
export { CIO_CODE_RE, CONCEPT_CODE_RE, DepthLayerAudit, ExtractOverviewOptions, ExtractScaffoldOptions, ExtractStepsOptions, LEARNER_CLAUSE, SIO_CODE_RE, ULO_CODE_RE, assignConceptCodes, auditDepthLayers, cioActionSlug, cioCode, conceptCodeFromName, extractFeatureSteps, extractFeatureStepsBatched, extractProjectOverview, extractScaffold, sioCode, standardStatement, techTagFor, uloCode } from './graph/index.cjs';
|
|
13
|
+
export { H as Hallucination, i as HybridGraphPipelineOptions, j as HybridGraphPipelineResult, K as KnowledgeGraphPipelineOptions, a as KnowledgeGraphPipelineResult, f as KnowledgeGraphVerificationReport, V as VerifyOptions, e as auditSyllabusCoverage, c as breakPrerequisiteCycles, d as detectPrerequisiteCycles, h as generateHybridGraph, g as generateKnowledgeGraph, b as verifyKnowledgeGraph, v as verifyProjectGraph } from './hybridGraphPipeline-DmWRKYXf.cjs';
|
|
12
14
|
export { C as ConceptMapping, E as EscalateOptions, e as escalateAndMapConcepts } from './conceptEscalator-ltRLtPhf.cjs';
|
|
13
15
|
export { ConceptMatch, ProposedConcept, ResolveConceptsOptions, ResolveConceptsResult, ResolvedConcept, resolveConcepts } from './concepts/index.cjs';
|
|
14
16
|
export { AssembleOptions, AssembledMilestone, AssembledPhase, AssembledRoadmap, assembleRoadmap } from './assembly/index.cjs';
|
|
15
17
|
export { EmitFeedOptions, emitCurriculumFeed } from './feed/index.cjs';
|
|
16
|
-
export { PipelineOptions, PipelineResult, runProjectGraphPipeline } from './pipeline/index.cjs';
|
|
18
|
+
export { DomainPipelineOptions, DomainPipelineResult, HybridPipelineOptions, HybridPipelineResult, KnowledgePipelineOptions, KnowledgePipelineResult, PipelineOptions, PipelineResult, runDomainPipeline, runHybridGraphPipeline, runKnowledgeGraphPipeline, runProjectGraphPipeline } from './pipeline/index.cjs';
|
|
17
19
|
import 'zod';
|
|
18
20
|
import './llmClient-ysPhLjcH.cjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
export { i as ArchEdgeSchema, A as ArchNodeSchema, x as ArchitectureDetail, j as ArchitectureDetailSchema, w as Capability, C as CapabilitySchema, z as DataIntegration, m as DataIntegrationSchema, G as Decomposition, s as DecompositionSchema, D as DevelopmentStageSchema, y as Experience, E as ExperienceComponentSchema, l as ExperienceSchema, d as Feature, F as FeatureSchema, B as Implementation, I as ImplementationSchema, e as JourneySchema, J as JourneyStepSchema, r as MilestoneDecompositionSchema, M as MissingGapSchema, N as NavigationSchema, v as Product, P as ProductGoalSchema, g as ProductSchema, f as ProductUserSchema, u as ProjectGraph, t as ProjectGraphSchema, h as ProjectInfoSchema, R as RequirementSchema, k as ScreenSchema, c as Step, S as StepEffortSchema, a as StepOutcomeSchema, b as StepSchema, n as TaskEffortSchema, o as TaskOutcomeSchema, p as TaskSchema, q as TechDebtSchema, T as TechStackSchema, U as UiStateSchema } from './projectGraphSchema-DnD7orZV.js';
|
|
2
2
|
export { b as Concept, d as ConceptCategory, c as ConceptCategorySchema, m as ConceptIntroduction, i as ConceptIntroductionSchema, C as ConceptSchema, l as DevelopmentPhase, D as DevelopmentPhaseSchema, j as HybridGraph, H as HybridGraphSchema, g as KnowledgeGraph, K as KnowledgeGraphSchema, f as LearningPathStep, L as LearningPathStepSchema, a as ProblemType, P as ProblemTypeSchema, k as ProjectConceptLink, h as ProjectConceptLinkSchema, e as SubjectInfo, S as SubjectInfoSchema } from './hybridGraphSchema-BCgXicgA.js';
|
|
3
|
-
export { HardwareFeatureExtensionSchema, HardwareStepSchema, HardwareTaskExtensionSchema, HardwareTechStackExtensionSchema, ShapeSchema, ThreeDesignFeatureExtensionSchema, ThreeDesignTaskExtensionSchema, ThreeDesignTechStackExtensionSchema, WiringSchema } from './schemas/index.js';
|
|
3
|
+
export { ExperimentProcedureSchema, GrammarRuleSchema, HardwareFeatureExtensionSchema, HardwareStepSchema, HardwareTaskExtensionSchema, HardwareTechStackExtensionSchema, LanguageConceptExtension, LanguageConceptExtensionSchema, MathConceptExtension, MathConceptExtensionSchema, MathTheoremSchema, ScienceConceptExtension, ScienceConceptExtensionSchema, ShapeSchema, ThreeDesignFeatureExtensionSchema, ThreeDesignTaskExtensionSchema, ThreeDesignTechStackExtensionSchema, WiringSchema } from './schemas/index.js';
|
|
4
4
|
export { a as DetectionConfidenceSchema, e as DomainCategory, D as DomainCategorySchema, c as DomainProfile, b as DomainProfileSchema, g as GraphType, G as GraphTypeSchema, d as InputType, I as InputTypeSchema, f as LearningMode, L as LearningModeSchema } from './domainProfileSchema-CwT3Ffsw.js';
|
|
5
5
|
export { g as CurriculumFeed, C as CurriculumFeedSchema, i as FeedEdge, c as FeedEdgeSchema, j as FeedGrouping, d as FeedGroupingSchema, F as FeedKeywordsSchema, h as FeedNode, b as FeedNodeSchema, f as FeedPhase, e as FeedPhaseSchema, a as FeedScaffoldCandidateSchema, v as validateCurriculumFeed } from './curriculumFeedSchema-TEeQg2bY.js';
|
|
6
|
-
export { CppParseResult, PythonParseResult, SwiftParseResult, TsParseResult, mergeCppResults, mergePythonResults, mergeSwiftResults, mergeTsResults, parseCppFile, parsePythonFile, parseSwiftFile, parseTsFile } from './
|
|
7
|
-
export {
|
|
6
|
+
export { C as CppParseResult, P as PythonParseResult, S as SwiftParseResult, T as TsParseResult, f as mergeCppResults, d as mergePythonResults, m as mergeSwiftResults, b as mergeTsResults, e as parseCppFile, c as parsePythonFile, p as parseSwiftFile, a as parseTsFile } from './cpp-CZUPqJt9.js';
|
|
7
|
+
export { P as ParsedSyllabus, a as SyllabusTopic, S as SyllabusUnit, p as parseSyllabus } from './syllabusParser-MSX1fEzW.js';
|
|
8
|
+
export { K as Keyword, S as SourceContext, e as extractKeywords } from './keywordExtractor-DU5XRN8-.js';
|
|
8
9
|
export { FileRelevanceScore, scoreByContent, scoreByPath, scoreFiles, selectRelevantFiles } from './extractors/index.js';
|
|
9
|
-
export { DetectDomainOptions,
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
10
|
+
export { DetectDomainOptions, DetectInputTypeOptions, DetectLearningModeOptions, DomainDetectionResult, InputTypeDetectionResult, LearningModeDetectionResult, detectDomain, detectInputType, detectLearningMode } from './detector/index.js';
|
|
11
|
+
export { D as DetectDomainProfileOptions, d as detectDomainProfile } from './domainProfileDetector-DHb1T0zB.js';
|
|
12
|
+
export { CIO_CODE_RE, CONCEPT_CODE_RE, DepthLayerAudit, ExtractOverviewOptions, ExtractScaffoldOptions, ExtractStepsOptions, LEARNER_CLAUSE, SIO_CODE_RE, ULO_CODE_RE, assignConceptCodes, auditDepthLayers, cioActionSlug, cioCode, conceptCodeFromName, extractFeatureSteps, extractFeatureStepsBatched, extractProjectOverview, extractScaffold, sioCode, standardStatement, techTagFor, uloCode } from './graph/index.js';
|
|
13
|
+
export { H as Hallucination, i as HybridGraphPipelineOptions, j as HybridGraphPipelineResult, K as KnowledgeGraphPipelineOptions, a as KnowledgeGraphPipelineResult, f as KnowledgeGraphVerificationReport, V as VerifyOptions, e as auditSyllabusCoverage, c as breakPrerequisiteCycles, d as detectPrerequisiteCycles, h as generateHybridGraph, g as generateKnowledgeGraph, b as verifyKnowledgeGraph, v as verifyProjectGraph } from './hybridGraphPipeline-DVZYLCAQ.js';
|
|
12
14
|
export { C as ConceptMapping, E as EscalateOptions, e as escalateAndMapConcepts } from './conceptEscalator-YfMKIKCZ.js';
|
|
13
15
|
export { ConceptMatch, ProposedConcept, ResolveConceptsOptions, ResolveConceptsResult, ResolvedConcept, resolveConcepts } from './concepts/index.js';
|
|
14
16
|
export { AssembleOptions, AssembledMilestone, AssembledPhase, AssembledRoadmap, assembleRoadmap } from './assembly/index.js';
|
|
15
17
|
export { EmitFeedOptions, emitCurriculumFeed } from './feed/index.js';
|
|
16
|
-
export { PipelineOptions, PipelineResult, runProjectGraphPipeline } from './pipeline/index.js';
|
|
18
|
+
export { DomainPipelineOptions, DomainPipelineResult, HybridPipelineOptions, HybridPipelineResult, KnowledgePipelineOptions, KnowledgePipelineResult, PipelineOptions, PipelineResult, runDomainPipeline, runHybridGraphPipeline, runKnowledgeGraphPipeline, runProjectGraphPipeline } from './pipeline/index.js';
|
|
17
19
|
import 'zod';
|
|
18
20
|
import './llmClient-ysPhLjcH.js';
|
package/dist/index.mjs
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
export { runProjectGraphPipeline } from './chunk-
|
|
3
|
-
export {
|
|
1
|
+
import './chunk-R57WTNXW.mjs';
|
|
2
|
+
export { runDomainPipeline, runHybridGraphPipeline, runKnowledgeGraphPipeline, runProjectGraphPipeline } from './chunk-KPZKPNOJ.mjs';
|
|
3
|
+
export { emitCurriculumFeed } from './chunk-RAR5MUUK.mjs';
|
|
4
|
+
export { ArchEdgeSchema, ArchNodeSchema, ArchitectureDetailSchema, CapabilitySchema, ConceptCategorySchema, ConceptIntroductionSchema, ConceptSchema, DataIntegrationSchema, DecompositionSchema, DetectionConfidenceSchema, DevelopmentPhaseSchema, DevelopmentStageSchema, DomainCategorySchema, DomainProfileSchema, ExperienceComponentSchema, ExperienceSchema, ExperimentProcedureSchema, FeatureSchema, GrammarRuleSchema, GraphTypeSchema, HardwareFeatureExtensionSchema, HardwareStepSchema, HardwareTaskExtensionSchema, HardwareTechStackExtensionSchema, HybridGraphSchema, ImplementationSchema, InputTypeSchema, JourneySchema, JourneyStepSchema, KnowledgeGraphSchema, LanguageConceptExtensionSchema, LearningModeSchema, LearningPathStepSchema, MathConceptExtensionSchema, MathTheoremSchema, MilestoneDecompositionSchema, MissingGapSchema, NavigationSchema, ProblemTypeSchema, ProductGoalSchema, ProductSchema, ProductUserSchema, ProjectConceptLinkSchema, ProjectGraphSchema, ProjectInfoSchema, RequirementSchema, ScienceConceptExtensionSchema, ScreenSchema, ShapeSchema, StepEffortSchema, StepOutcomeSchema, StepSchema, SubjectInfoSchema, TaskEffortSchema, TaskOutcomeSchema, TaskSchema, TechDebtSchema, TechStackSchema, ThreeDesignFeatureExtensionSchema, ThreeDesignTaskExtensionSchema, ThreeDesignTechStackExtensionSchema, UiStateSchema, WiringSchema } from './chunk-WHBAGJWN.mjs';
|
|
4
5
|
export { CurriculumFeedSchema, FeedEdgeSchema, FeedGroupingSchema, FeedKeywordsSchema, FeedNodeSchema, FeedPhaseSchema, FeedScaffoldCandidateSchema, validateCurriculumFeed } from './chunk-HH4UX65C.mjs';
|
|
5
|
-
import './chunk-
|
|
6
|
+
import './chunk-IJZUV7N3.mjs';
|
|
6
7
|
export { mergeCppResults, mergePythonResults, mergeSwiftResults, mergeTsResults, parseCppFile, parsePythonFile, parseSwiftFile, parseTsFile } from './chunk-DRVOV5ZD.mjs';
|
|
7
8
|
export { scoreByContent, scoreByPath, scoreFiles, selectRelevantFiles } from './chunk-RKRNOVKO.mjs';
|
|
8
9
|
export { extractKeywords } from './chunk-XMHKWHVK.mjs';
|
|
9
|
-
|
|
10
|
-
export {
|
|
11
|
-
|
|
10
|
+
import './chunk-7XGWW6CB.mjs';
|
|
11
|
+
export { detectDomain, detectDomainProfile, detectInputType, detectLearningMode } from './chunk-BL5NBKPH.mjs';
|
|
12
|
+
import './chunk-ZKLT27T4.mjs';
|
|
13
|
+
export { CIO_CODE_RE, CONCEPT_CODE_RE, LEARNER_CLAUSE, SIO_CODE_RE, ULO_CODE_RE, assignConceptCodes, auditDepthLayers, auditSyllabusCoverage, breakPrerequisiteCycles, cioActionSlug, cioCode, conceptCodeFromName, detectPrerequisiteCycles, escalateAndMapConcepts, extractFeatureSteps, extractFeatureStepsBatched, extractProjectOverview, extractScaffold, generateHybridGraph, generateKnowledgeGraph, sioCode, standardStatement, techTagFor, uloCode, verifyKnowledgeGraph, verifyProjectGraph } from './chunk-JE57VFWX.mjs';
|
|
14
|
+
export { parseSyllabus } from './chunk-T4Y2DE2W.mjs';
|
|
12
15
|
import './chunk-KMYENICQ.mjs';
|
|
13
16
|
export { resolveConcepts } from './chunk-KNDBODUQ.mjs';
|
|
14
17
|
import './chunk-MM2RWYNW.mjs';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SwiftParseResult, TsParseResult, PythonParseResult, CppParseResult } from './
|
|
1
|
+
import { S as SwiftParseResult, T as TsParseResult, P as PythonParseResult, C as CppParseResult } from './cpp-CZUPqJt9.cjs';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Keyword extraction logic — combines AST parser results into structured keywords
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SwiftParseResult, TsParseResult, PythonParseResult, CppParseResult } from './
|
|
1
|
+
import { S as SwiftParseResult, T as TsParseResult, P as PythonParseResult, C as CppParseResult } from './cpp-CZUPqJt9.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Keyword extraction logic — combines AST parser results into structured keywords
|
package/dist/parsers/index.cjs
CHANGED
|
@@ -311,6 +311,190 @@ function mergeCppResults(results) {
|
|
|
311
311
|
return merged;
|
|
312
312
|
}
|
|
313
313
|
|
|
314
|
+
// src/parsers/syllabusParser.ts
|
|
315
|
+
var STOP_WORDS = /* @__PURE__ */ new Set([
|
|
316
|
+
"and",
|
|
317
|
+
"the",
|
|
318
|
+
"for",
|
|
319
|
+
"with",
|
|
320
|
+
"from",
|
|
321
|
+
"that",
|
|
322
|
+
"this",
|
|
323
|
+
"into",
|
|
324
|
+
"when",
|
|
325
|
+
"while",
|
|
326
|
+
"using",
|
|
327
|
+
"their",
|
|
328
|
+
"your",
|
|
329
|
+
"each",
|
|
330
|
+
"how",
|
|
331
|
+
"why",
|
|
332
|
+
"what",
|
|
333
|
+
"between",
|
|
334
|
+
"through",
|
|
335
|
+
"about",
|
|
336
|
+
"trong",
|
|
337
|
+
"nhung",
|
|
338
|
+
"cac",
|
|
339
|
+
"cua",
|
|
340
|
+
"cho",
|
|
341
|
+
"voi",
|
|
342
|
+
"duoc",
|
|
343
|
+
"khong",
|
|
344
|
+
"theo",
|
|
345
|
+
"tren",
|
|
346
|
+
"duoi",
|
|
347
|
+
"va",
|
|
348
|
+
"hoac",
|
|
349
|
+
"thi",
|
|
350
|
+
"la",
|
|
351
|
+
"nhu"
|
|
352
|
+
]);
|
|
353
|
+
function extractTokens(text) {
|
|
354
|
+
const words = text.toLowerCase().replace(/[^a-z0-9à-ỹ\s-]/gi, " ").split(/\s+/).filter((w) => w.length >= 3 && !STOP_WORDS.has(w));
|
|
355
|
+
return [...new Set(words)];
|
|
356
|
+
}
|
|
357
|
+
function extractGradeBand(text) {
|
|
358
|
+
const gbMatch = text.match(/(?:grade\s*band|độ\s*tuổi|lớp)\s*[:=]?\s*(?:lớp\s*)?(\d{1,2})\s*(?:-|đến|to)\s*(?:lớp\s*)?(\d{1,2})/i);
|
|
359
|
+
if (gbMatch && gbMatch[1] && gbMatch[2]) {
|
|
360
|
+
const min = parseInt(gbMatch[1], 10);
|
|
361
|
+
const max = parseInt(gbMatch[2], 10);
|
|
362
|
+
return [Math.min(min, max), Math.max(min, max)];
|
|
363
|
+
}
|
|
364
|
+
return void 0;
|
|
365
|
+
}
|
|
366
|
+
function extractDomain(text) {
|
|
367
|
+
const lower = text.toLowerCase();
|
|
368
|
+
if (lower.includes("computer science") || lower.includes("l\u1EADp tr\xECnh") || lower.includes("algorithm") || lower.includes("software")) return "software";
|
|
369
|
+
if (lower.includes("to\xE1n") || lower.includes("geometry") || lower.includes("algebra") || lower.includes("h\xECnh h\u1ECDc") || lower.includes("mathematics")) return "math";
|
|
370
|
+
if (lower.includes("v\u1EADt l\xFD") || lower.includes("h\xF3a h\u1ECDc") || lower.includes("sinh h\u1ECDc") || lower.includes("physics") || lower.includes("chemistry") || lower.includes("biology") || lower.includes("science")) return "science";
|
|
371
|
+
if (lower.includes("ti\u1EBFng") || lower.includes("ng\u1EEF v\u0103n") || lower.includes("grammar") || lower.includes("language") || lower.includes("writing") || lower.includes("literature")) return "language";
|
|
372
|
+
return void 0;
|
|
373
|
+
}
|
|
374
|
+
function parseSyllabus(rawText) {
|
|
375
|
+
const lines = rawText.split(/\r?\n/);
|
|
376
|
+
let subjectTitle = "";
|
|
377
|
+
let subjectDesc = "";
|
|
378
|
+
const units = [];
|
|
379
|
+
const allTopics = [];
|
|
380
|
+
const globalKeywordsSet = /* @__PURE__ */ new Set();
|
|
381
|
+
let currentUnit = null;
|
|
382
|
+
let currentTopic = null;
|
|
383
|
+
let unitIndex = 0;
|
|
384
|
+
let topicIndex = 0;
|
|
385
|
+
for (let i = 0; i < lines.length; i++) {
|
|
386
|
+
const line = lines[i].trim();
|
|
387
|
+
const lineNum = i + 1;
|
|
388
|
+
if (!line) continue;
|
|
389
|
+
if (line.startsWith("# ") && !subjectTitle) {
|
|
390
|
+
subjectTitle = line.replace(/^#\s+/, "").trim();
|
|
391
|
+
continue;
|
|
392
|
+
}
|
|
393
|
+
if (!currentUnit) {
|
|
394
|
+
if (line.toLowerCase().startsWith("m\xF4n h\u1ECDc:") || line.toLowerCase().startsWith("subject:")) {
|
|
395
|
+
const val = line.split(":")[1]?.trim() || "";
|
|
396
|
+
if (val && !subjectTitle) subjectTitle = val;
|
|
397
|
+
}
|
|
398
|
+
if (line.toLowerCase().startsWith("m\xF4 t\u1EA3:") || line.toLowerCase().startsWith("description:")) {
|
|
399
|
+
subjectDesc = line.split(":")[1]?.trim() || "";
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
const isUnitHeading = /^##\s+(?:chương|module|unit|phần|chủ đề)\s*(\d+|[ivx]+)?[:.-]?\s*(.*)/i.test(line) || /^##\s+([^#].*)/.test(line);
|
|
403
|
+
if (isUnitHeading) {
|
|
404
|
+
if (currentTopic) {
|
|
405
|
+
currentTopic.rawLineEnd = lineNum - 1;
|
|
406
|
+
currentTopic = null;
|
|
407
|
+
}
|
|
408
|
+
unitIndex += 1;
|
|
409
|
+
const titleMatch = line.replace(/^##\s+/, "").trim();
|
|
410
|
+
currentUnit = {
|
|
411
|
+
id: `U${String(unitIndex).padStart(2, "0")}`,
|
|
412
|
+
title: titleMatch,
|
|
413
|
+
order: unitIndex,
|
|
414
|
+
topics: []
|
|
415
|
+
};
|
|
416
|
+
units.push(currentUnit);
|
|
417
|
+
continue;
|
|
418
|
+
}
|
|
419
|
+
const isTopicItem = /^(?:-\s*\*\*(?:bài|topic|lesson|chủ đề)\s*(\d+(?:\.\d+)?|\w+)?[:.-]?\s*(.*?)\*\*)/i.exec(line) || /^###\s+(?:bài|topic|lesson)?\s*(\d+(?:\.\d+)?|\w+)?[:.-]?\s*(.*)/i.exec(line) || /^-\s+\*\*(.*?)\*\*/.exec(line) || /^(\d+)\.\s+(?:(?:\*\*)?(?:bài|topic|lesson)?\s*(\d+(?:\.\d+)?|\w+)?[:.-]?\s*(.*?)(?:\*\*)?)$/i.exec(line);
|
|
420
|
+
if (isTopicItem) {
|
|
421
|
+
if (currentTopic) {
|
|
422
|
+
currentTopic.rawLineEnd = lineNum - 1;
|
|
423
|
+
}
|
|
424
|
+
if (!currentUnit) {
|
|
425
|
+
unitIndex += 1;
|
|
426
|
+
currentUnit = {
|
|
427
|
+
id: `U${String(unitIndex).padStart(2, "0")}`,
|
|
428
|
+
title: subjectTitle || "General",
|
|
429
|
+
order: unitIndex,
|
|
430
|
+
topics: []
|
|
431
|
+
};
|
|
432
|
+
units.push(currentUnit);
|
|
433
|
+
}
|
|
434
|
+
topicIndex += 1;
|
|
435
|
+
const rawName = (isTopicItem[3] || isTopicItem[2] || isTopicItem[1] || `Topic ${topicIndex}`).trim();
|
|
436
|
+
currentTopic = {
|
|
437
|
+
id: `T${String(topicIndex).padStart(2, "0")}`,
|
|
438
|
+
title: rawName,
|
|
439
|
+
unitId: currentUnit.id,
|
|
440
|
+
unitTitle: currentUnit.title,
|
|
441
|
+
description: "",
|
|
442
|
+
learningObjectives: [],
|
|
443
|
+
keywords: [],
|
|
444
|
+
rawLineStart: lineNum,
|
|
445
|
+
rawLineEnd: lineNum
|
|
446
|
+
};
|
|
447
|
+
currentUnit.topics.push(currentTopic);
|
|
448
|
+
allTopics.push(currentTopic);
|
|
449
|
+
continue;
|
|
450
|
+
}
|
|
451
|
+
if (currentTopic) {
|
|
452
|
+
currentTopic.rawLineEnd = lineNum;
|
|
453
|
+
const stripped = line.replace(/^[-*•\s]+/, "").trim();
|
|
454
|
+
if (stripped.toLowerCase().startsWith("m\u1EE5c ti\xEAu:") || stripped.toLowerCase().startsWith("objectives:")) {
|
|
455
|
+
const content = stripped.replace(/^(?:mục tiêu|objectives):\s*/i, "").trim();
|
|
456
|
+
if (content) currentTopic.learningObjectives.push(content);
|
|
457
|
+
continue;
|
|
458
|
+
}
|
|
459
|
+
if (stripped.toLowerCase().startsWith("t\u1EEB kh\xF3a:") || stripped.toLowerCase().startsWith("keywords:")) {
|
|
460
|
+
const rawKw = stripped.replace(/^(?:từ khóa|keywords):\s*/i, "").trim();
|
|
461
|
+
const tokens = rawKw.split(/[,;]+/).map((k) => k.trim()).filter(Boolean);
|
|
462
|
+
for (const tok of tokens) {
|
|
463
|
+
currentTopic.keywords.push(tok);
|
|
464
|
+
globalKeywordsSet.add(tok);
|
|
465
|
+
}
|
|
466
|
+
continue;
|
|
467
|
+
}
|
|
468
|
+
if (currentTopic.description) {
|
|
469
|
+
currentTopic.description += " " + stripped;
|
|
470
|
+
} else {
|
|
471
|
+
currentTopic.description = stripped;
|
|
472
|
+
}
|
|
473
|
+
for (const tok of extractTokens(stripped)) {
|
|
474
|
+
if (tok.length >= 4) globalKeywordsSet.add(tok);
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
if (currentTopic) {
|
|
479
|
+
currentTopic.rawLineEnd = lines.length;
|
|
480
|
+
}
|
|
481
|
+
if (!subjectTitle && units.length > 0) {
|
|
482
|
+
subjectTitle = units[0]?.title || "Untitled Subject";
|
|
483
|
+
}
|
|
484
|
+
return {
|
|
485
|
+
subject: {
|
|
486
|
+
title: subjectTitle || "Untitled Subject",
|
|
487
|
+
domain: extractDomain(rawText),
|
|
488
|
+
gradeBand: extractGradeBand(rawText),
|
|
489
|
+
description: subjectDesc
|
|
490
|
+
},
|
|
491
|
+
units,
|
|
492
|
+
allTopics,
|
|
493
|
+
extractedKeywords: [...globalKeywordsSet],
|
|
494
|
+
rawText
|
|
495
|
+
};
|
|
496
|
+
}
|
|
497
|
+
|
|
314
498
|
exports.mergeCppResults = mergeCppResults;
|
|
315
499
|
exports.mergePythonResults = mergePythonResults;
|
|
316
500
|
exports.mergeSwiftResults = mergeSwiftResults;
|
|
@@ -318,6 +502,7 @@ exports.mergeTsResults = mergeTsResults;
|
|
|
318
502
|
exports.parseCppFile = parseCppFile;
|
|
319
503
|
exports.parsePythonFile = parsePythonFile;
|
|
320
504
|
exports.parseSwiftFile = parseSwiftFile;
|
|
505
|
+
exports.parseSyllabus = parseSyllabus;
|
|
321
506
|
exports.parseTsFile = parseTsFile;
|
|
322
507
|
//# sourceMappingURL=index.cjs.map
|
|
323
508
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/parsers/swift.ts","../../src/parsers/typescript.ts","../../src/parsers/python.ts","../../src/parsers/cpp.ts"],"names":["IMPORT_RE","TYPE_RE","FUNC_RE"],"mappings":";;;AA0BA,IAAM,SAAA,GAAY,mBAAA;AAClB,IAAM,OAAA,GAAU,4DAAA;AAChB,IAAM,OAAA,GAAU,mDAAA;AAChB,IAAM,UAAA,GAAa,sIAAA;AACnB,IAAM,kBAAA,GAAqB,oJAAA;AAEpB,SAAS,cAAA,CAAe,UAAkB,OAAA,EAAmC;AAClF,EAAA,MAAM,MAAA,GAA2B;AAAA,IAC/B,SAAS,EAAC;AAAA,IACV,OAAO,EAAC;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,mBAAmB,EAAC;AAAA,IACpB,gBAAgB,EAAC;AAAA,IACjB,iBAAiB;AAAC,GACpB;AAGA,EAAA,IAAI,KAAA;AACJ,EAAA,OAAA,CAAQ,KAAA,GAAQ,SAAA,CAAU,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AACjD,IAAA,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,EAC9B;AAGA,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAY;AAC/B,EAAA,OAAA,CAAQ,KAAA,GAAQ,kBAAA,CAAmB,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AAC1D,IAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AACzB,MAAA,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,CAAC,CAAC,CAAA;AACnB,MAAA,MAAA,CAAO,eAAA,CAAgB,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,IACtC;AAAA,EACF;AAGA,EAAA,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AAC/C,IAAA,MAAM,QAAA,GAAA,CAAY,KAAA,CAAM,CAAC,CAAA,IAAK,IAC3B,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,OAAK,CAAA,CAAE,IAAA,EAAM,CAAA,CACjB,OAAO,OAAO,CAAA;AACjB,IAAA,MAAA,CAAO,MAAM,IAAA,CAAK;AAAA,MAChB,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,MACb,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,MACb,WAAA,EAAa,QAAA;AAAA,MACb,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAGA,EAAA,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AAC/C,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AAC1B,IAAA,MAAA,CAAO,UAAU,IAAA,CAAK;AAAA,MACpB,IAAA;AAAA,MACA,MAAA,EAAA,CAAS,KAAA,CAAM,CAAC,CAAA,IAAK,IAAI,IAAA,EAAK;AAAA,MAC9B,OAAA,EAAA,CAAU,KAAA,CAAM,CAAC,CAAA,IAAK,IAAI,IAAA,EAAK;AAAA,MAC/B,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAY;AACnC,EAAA,OAAA,CAAQ,KAAA,GAAQ,UAAA,CAAW,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AAClD,IAAA,UAAA,CAAW,GAAA,CAAI,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,EACzB;AACA,EAAA,MAAA,CAAO,iBAAA,GAAoB,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA;AAGhD,EAAA,IAAI,QAAQ,QAAA,CAAS,MAAM,KAAK,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA,EAAG;AACvD,IAAA,MAAA,CAAO,cAAA,CAAe,KAAK,UAAU,CAAA;AAAA,EACvC;AACA,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA,EAAG;AAC9B,IAAA,MAAA,CAAO,cAAA,CAAe,KAAK,QAAQ,CAAA;AAAA,EACrC;AACA,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG;AAC/B,IAAA,MAAA,CAAO,cAAA,CAAe,KAAK,aAAa,CAAA;AAAA,EAC1C;AACA,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,EAAG;AAC5B,IAAA,MAAA,CAAO,cAAA,CAAe,KAAK,MAAM,CAAA;AAAA,EACnC;AACA,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,EAAG;AAC5B,IAAA,MAAA,CAAO,cAAA,CAAe,KAAK,MAAM,CAAA;AAAA,EACnC;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,kBAAkB,OAAA,EAA+C;AAC/E,EAAA,MAAM,MAAA,GAA2B;AAAA,IAC/B,SAAS,EAAC;AAAA,IACV,OAAO,EAAC;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,mBAAmB,EAAC;AAAA,IACpB,gBAAgB,EAAC;AAAA,IACjB,iBAAiB;AAAC,GACpB;AAEA,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAoB;AAC7C,EAAA,MAAM,aAAA,uBAAoB,GAAA,EAAoB;AAC9C,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAoB;AAC5C,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAY;AAErC,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,KAAA,MAAW,GAAA,IAAO,EAAE,OAAA,EAAS;AAC3B,MAAA,YAAA,CAAa,IAAI,GAAA,EAAA,CAAM,YAAA,CAAa,IAAI,GAAG,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,IACxD;AACA,IAAA,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,CAAE,KAAK,CAAA;AAC5B,IAAA,MAAA,CAAO,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA,CAAE,SAAS,CAAA;AACpC,IAAA,KAAA,MAAW,CAAA,IAAK,EAAE,iBAAA,EAAmB;AACnC,MAAA,aAAA,CAAc,IAAI,CAAA,EAAA,CAAI,aAAA,CAAc,IAAI,CAAC,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,IACtD;AACA,IAAA,KAAA,MAAW,CAAA,IAAK,EAAE,cAAA,EAAgB;AAChC,MAAA,WAAA,CAAY,IAAI,CAAA,EAAA,CAAI,WAAA,CAAY,IAAI,CAAC,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,IAClD;AACA,IAAA,KAAA,MAAW,EAAA,IAAM,EAAE,eAAA,EAAiB;AAClC,MAAA,YAAA,CAAa,IAAI,EAAE,CAAA;AAAA,IACrB;AAAA,EACF;AAGA,EAAA,MAAA,CAAO,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS,CAAA,CAC/C,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CAC1B,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CACX,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,GAAG,CAAA;AAG5B,EAAA,MAAA,CAAO,iBAAA,GAAoB,KAAA,CAAM,IAAA,CAAK,aAAA,CAAc,OAAA,EAAS,CAAA,CAC1D,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CAC1B,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CACX,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA,KAAM,CAAC,CAAA;AAGjB,EAAA,MAAA,CAAO,cAAA,GAAiB,KAAA,CAAM,IAAA,CAAK,WAAA,CAAY,OAAA,EAAS,CAAA,CACrD,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CAC1B,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CACX,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA,KAAM,CAAC,CAAA;AAEjB,EAAA,MAAA,CAAO,eAAA,GAAkB,KAAA,CAAM,IAAA,CAAK,YAAY,EAAE,IAAA,EAAK;AAGvD,EAAA,MAAA,CAAO,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,GAAG,GAAG,CAAA;AACxC,EAAA,MAAA,CAAO,SAAA,GAAY,MAAA,CAAO,SAAA,CAAU,KAAA,CAAM,GAAG,GAAG,CAAA;AAEhD,EAAA,OAAO,MAAA;AACT;;;ACjJA,IAAMA,UAAAA,GAAY,sCAAA;AAClB,IAAMC,QAAAA,GAAU,wCAAA;AAChB,IAAMC,QAAAA,GAAU,mCAAA;AAChB,IAAM,QAAA,GAAW,sDAAA;AAEV,SAAS,WAAA,CAAY,UAAkB,OAAA,EAAgC;AAC5E,EAAA,MAAM,MAAA,GAAwB;AAAA,IAC5B,SAAS,EAAC;AAAA,IACV,OAAO,EAAC;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,gBAAgB;AAAC,GACnB;AAEA,EAAA,IAAI,KAAA;AAGJ,EAAA,OAAA,CAAQ,KAAA,GAAQF,UAAAA,CAAU,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AACjD,IAAA,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,EAC9B;AAGA,EAAA,OAAA,CAAQ,KAAA,GAAQC,QAAAA,CAAQ,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AAC/C,IAAA,MAAA,CAAO,MAAM,IAAA,CAAK;AAAA,MAChB,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,MACb,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,MACb,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAGA,EAAA,OAAA,CAAQ,KAAA,GAAQC,QAAAA,CAAQ,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AAC/C,IAAA,MAAA,CAAO,UAAU,IAAA,CAAK;AAAA,MACpB,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,MACb,MAAA,EAAA,CAAS,KAAA,CAAM,CAAC,CAAA,IAAK,IAAI,IAAA,EAAK;AAAA,MAC9B,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAGA,EAAA,OAAA,CAAQ,KAAA,GAAQ,QAAA,CAAS,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AAChD,IAAA,MAAA,CAAO,UAAU,IAAA,CAAK;AAAA,MACpB,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,MACb,MAAA,EAAQ,EAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,QAAQ,QAAA,CAAS,OAAO,KAAK,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,EAAG;AACzD,IAAA,MAAA,CAAO,cAAA,CAAe,KAAK,WAAW,CAAA;AAAA,EACxC;AACA,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG;AAC/B,IAAA,MAAA,CAAO,cAAA,CAAe,KAAK,SAAS,CAAA;AAAA,EACtC;AACA,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG;AAC/B,IAAA,MAAA,CAAO,cAAA,CAAe,KAAK,UAAU,CAAA;AAAA,EACvC;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,eAAe,OAAA,EAAyC;AACtE,EAAA,MAAM,MAAA,GAAwB;AAAA,IAC5B,SAAS,EAAC;AAAA,IACV,OAAO,EAAC;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,gBAAgB;AAAC,GACnB;AAEA,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAoB;AAC7C,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAoB;AAE5C,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,KAAA,MAAW,GAAA,IAAO,EAAE,OAAA,EAAS;AAC3B,MAAA,YAAA,CAAa,IAAI,GAAA,EAAA,CAAM,YAAA,CAAa,IAAI,GAAG,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,IACxD;AACA,IAAA,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,CAAE,KAAK,CAAA;AAC5B,IAAA,MAAA,CAAO,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA,CAAE,SAAS,CAAA;AACpC,IAAA,KAAA,MAAW,CAAA,IAAK,EAAE,cAAA,EAAgB;AAChC,MAAA,WAAA,CAAY,IAAI,CAAA,EAAA,CAAI,WAAA,CAAY,IAAI,CAAC,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,IAClD;AAAA,EACF;AAEA,EAAA,MAAA,CAAO,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS,CAAA,CAC/C,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CAC1B,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CACX,GAAA,CAAI,CAAC,CAAC,GAAG,CAAA,KAAM,GAAG,CAAA;AAErB,EAAA,MAAA,CAAO,cAAA,GAAiB,KAAA,CAAM,IAAA,CAAK,WAAA,CAAY,OAAA,EAAS,CAAA,CACrD,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CAC1B,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CACX,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA,KAAM,CAAC,CAAA;AAEjB,EAAA,MAAA,CAAO,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,GAAG,GAAG,CAAA;AACxC,EAAA,MAAA,CAAO,SAAA,GAAY,MAAA,CAAO,SAAA,CAAU,KAAA,CAAM,GAAG,GAAG,CAAA;AAEhD,EAAA,OAAO,MAAA;AACT;;;AC/FA,IAAMF,UAAAA,GAAY,4BAAA;AAClB,IAAM,QAAA,GAAW,qCAAA;AACjB,IAAME,QAAAA,GAAU,8BAAA;AAChB,IAAM,YAAA,GAAe,uBAAA;AAEd,SAAS,eAAA,CAAgB,UAAkB,OAAA,EAAoC;AACpF,EAAA,MAAM,MAAA,GAA4B;AAAA,IAChC,SAAS,EAAC;AAAA,IACV,OAAO,EAAC;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,YAAY,EAAC;AAAA,IACb,gBAAgB;AAAC,GACnB;AAEA,EAAA,IAAI,KAAA;AAGJ,EAAA,OAAA,CAAQ,KAAA,GAAQF,UAAAA,CAAU,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AACjD,IAAA,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,EAC9B;AAGA,EAAA,OAAA,CAAQ,KAAA,GAAQ,YAAA,CAAa,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AACpD,IAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAK,CAAE,KAAA,CAAM,IAAI,CAAA,CAAE,CAAC,CAAA,CAAE,KAAA,CAAM,GAAG,GAAG,CAAA;AACjE,IAAA,IAAI,aAAA,CAAc,SAAS,EAAA,EAAI;AAC7B,MAAA,MAAA,CAAO,UAAA,CAAW,KAAK,aAAa,CAAA;AAAA,IACtC;AAAA,EACF;AAGA,EAAA,OAAA,CAAQ,KAAA,GAAQ,QAAA,CAAS,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AAChD,IAAA,MAAM,KAAA,GAAA,CAAS,KAAA,CAAM,CAAC,CAAA,IAAK,IACxB,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,OAAK,CAAA,CAAE,IAAA,EAAM,CAAA,CACjB,OAAO,OAAO,CAAA;AACjB,IAAA,MAAA,CAAO,MAAM,IAAA,CAAK;AAAA,MAChB,IAAA,EAAM,OAAA;AAAA,MACN,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,MACb,KAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAGA,EAAA,OAAA,CAAQ,KAAA,GAAQE,QAAAA,CAAQ,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AAC/C,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AAEpB,IAAA,IAAI,KAAK,UAAA,CAAW,IAAI,KAAK,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AAClD,IAAA,MAAA,CAAO,UAAU,IAAA,CAAK;AAAA,MACpB,IAAA;AAAA,MACA,MAAA,EAAA,CAAS,KAAA,CAAM,CAAC,CAAA,IAAK,IAAI,IAAA,EAAK;AAAA,MAC9B,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,EAAG;AAC5B,IAAA,MAAA,CAAO,cAAA,CAAe,KAAK,YAAY,CAAA;AAAA,EACzC;AACA,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG;AAC7B,IAAA,MAAA,CAAO,cAAA,CAAe,KAAK,OAAO,CAAA;AAAA,EACpC;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,mBAAmB,OAAA,EAAiD;AAClF,EAAA,MAAM,MAAA,GAA4B;AAAA,IAChC,SAAS,EAAC;AAAA,IACV,OAAO,EAAC;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,YAAY,EAAC;AAAA,IACb,gBAAgB;AAAC,GACnB;AAEA,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAoB;AAC7C,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAoB;AAE5C,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,KAAA,MAAW,GAAA,IAAO,EAAE,OAAA,EAAS;AAC3B,MAAA,YAAA,CAAa,IAAI,GAAA,EAAA,CAAM,YAAA,CAAa,IAAI,GAAG,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,IACxD;AACA,IAAA,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,CAAE,KAAK,CAAA;AAC5B,IAAA,MAAA,CAAO,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA,CAAE,SAAS,CAAA;AACpC,IAAA,MAAA,CAAO,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA,CAAE,UAAU,CAAA;AACtC,IAAA,KAAA,MAAW,CAAA,IAAK,EAAE,cAAA,EAAgB;AAChC,MAAA,WAAA,CAAY,IAAI,CAAA,EAAA,CAAI,WAAA,CAAY,IAAI,CAAC,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,IAClD;AAAA,EACF;AAEA,EAAA,MAAA,CAAO,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS,CAAA,CAC/C,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CAC1B,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CACX,GAAA,CAAI,CAAC,CAAC,GAAG,CAAA,KAAM,GAAG,CAAA;AAErB,EAAA,MAAA,CAAO,cAAA,GAAiB,KAAA,CAAM,IAAA,CAAK,WAAA,CAAY,OAAA,EAAS,CAAA,CACrD,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CAC1B,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CACX,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA,KAAM,CAAC,CAAA;AAEjB,EAAA,MAAA,CAAO,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,GAAG,GAAG,CAAA;AACxC,EAAA,MAAA,CAAO,SAAA,GAAY,MAAA,CAAO,SAAA,CAAU,KAAA,CAAM,GAAG,GAAG,CAAA;AAChD,EAAA,MAAA,CAAO,UAAA,GAAa,MAAA,CAAO,UAAA,CAAW,KAAA,CAAM,GAAG,EAAE,CAAA;AAEjD,EAAA,OAAO,MAAA;AACT;;;AC5GA,IAAM,UAAA,GAAa,8BAAA;AACnB,IAAMD,QAAAA,GAAU,kCAAA;AAChB,IAAMC,QAAAA,GAAU,sFAAA;AAET,SAAS,YAAA,CAAa,UAAkB,OAAA,EAAiC;AAC9E,EAAA,MAAM,MAAA,GAAyB;AAAA,IAC7B,SAAS,EAAC;AAAA,IACV,OAAO,EAAC;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,gBAAgB;AAAC,GACnB;AAEA,EAAA,IAAI,KAAA;AAGJ,EAAA,OAAA,CAAQ,KAAA,GAAQ,UAAA,CAAW,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AAClD,IAAA,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,EAC9B;AAGA,EAAA,OAAA,CAAQ,KAAA,GAAQD,QAAAA,CAAQ,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AAC/C,IAAA,MAAA,CAAO,MAAM,IAAA,CAAK;AAAA,MAChB,IAAA,EAAM,KAAA;AAAA,MACN,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,MACb,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAGA,EAAA,OAAA,CAAQ,KAAA,GAAQC,QAAAA,CAAQ,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AAC/C,IAAA,MAAA,CAAO,UAAU,IAAA,CAAK;AAAA,MACpB,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,MACb,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,6BAAA,CAA8B,IAAA,CAAK,OAAO,CAAA,EAAG;AAC/C,IAAA,MAAA,CAAO,cAAA,CAAe,KAAK,iBAAiB,CAAA;AAAA,EAC9C;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,gBAAgB,OAAA,EAA2C;AACzE,EAAA,MAAM,MAAA,GAAyB;AAAA,IAC7B,SAAS,EAAC;AAAA,IACV,OAAO,EAAC;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,gBAAgB;AAAC,GACnB;AAEA,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAoB;AAE7C,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,KAAA,MAAW,GAAA,IAAO,EAAE,OAAA,EAAS;AAC3B,MAAA,YAAA,CAAa,IAAI,GAAA,EAAA,CAAM,YAAA,CAAa,IAAI,GAAG,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,IACxD;AACA,IAAA,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,CAAE,KAAK,CAAA;AAC5B,IAAA,MAAA,CAAO,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA,CAAE,SAAS,CAAA;AACpC,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,CAAK,GAAG,CAAA,CAAE,cAAc,CAAA;AAAA,EAChD;AAEA,EAAA,MAAA,CAAO,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS,CAAA,CAC/C,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CAC1B,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CACX,GAAA,CAAI,CAAC,CAAC,GAAG,CAAA,KAAM,GAAG,CAAA;AAGrB,EAAA,MAAA,CAAO,iBAAiB,CAAC,GAAG,IAAI,GAAA,CAAI,MAAA,CAAO,cAAc,CAAC,CAAA;AAE1D,EAAA,OAAO,MAAA;AACT","file":"index.cjs","sourcesContent":["/**\n * Swift AST-level parser — extracts imports, types, functions, property wrappers,\n * error handling patterns, and framework usage from Swift source files.\n *\n * Ported from knowledge-tree/extract_project_keywords.py parse_swift_file()\n */\n\nexport interface SwiftParseResult {\n imports: string[];\n types: Array<{\n kind: string;\n name: string;\n conforms_to: string[];\n file: string;\n }>;\n functions: Array<{\n name: string;\n params: string;\n returns: string;\n file: string;\n }>;\n property_wrappers: string[];\n error_handling: string[];\n frameworks_used: string[];\n}\n\nconst IMPORT_RE = /^import\\s+(\\w+)/gm;\nconst TYPE_RE = /\\b(class|struct|enum|protocol)\\s+(\\w+)(?:\\s*:\\s*([^{]+))?/g;\nconst FUNC_RE = /\\bfunc\\s+(\\w+)\\s*\\(([^)]*)\\)(?:\\s*->\\s*([^{]+))?/g;\nconst WRAPPER_RE = /@(State|Binding|ObservedObject|StateObject|Published|Environment|EnvironmentObject|AppStorage|SceneStorage|FocusState|Observable)\\b/g;\nconst FRAMEWORK_USAGE_RE = /\\b(URLSession|URLRequest|JSONSerialization|JSONDecoder|JSONEncoder|Task|DispatchQueue|Timer|NotificationCenter|UserDefaults|FileManager|Bundle)\\b/g;\n\nexport function parseSwiftFile(filepath: string, content: string): SwiftParseResult {\n const result: SwiftParseResult = {\n imports: [],\n types: [],\n functions: [],\n property_wrappers: [],\n error_handling: [],\n frameworks_used: [],\n };\n\n // Extract imports\n let match: RegExpExecArray | null;\n while ((match = IMPORT_RE.exec(content)) !== null) {\n result.imports.push(match[1]);\n }\n\n // Extract framework usage (types used in body, not declarations)\n const fwSeen = new Set<string>();\n while ((match = FRAMEWORK_USAGE_RE.exec(content)) !== null) {\n if (!fwSeen.has(match[1])) {\n fwSeen.add(match[1]);\n result.frameworks_used.push(match[1]);\n }\n }\n\n // Extract type declarations\n while ((match = TYPE_RE.exec(content)) !== null) {\n const conforms = (match[3] || '')\n .split(',')\n .map(p => p.trim())\n .filter(Boolean);\n result.types.push({\n kind: match[1],\n name: match[2],\n conforms_to: conforms,\n file: filepath,\n });\n }\n\n // Extract function signatures\n while ((match = FUNC_RE.exec(content)) !== null) {\n const name = match[1];\n if (name.startsWith('_')) continue;\n result.functions.push({\n name,\n params: (match[2] || '').trim(),\n returns: (match[3] || '').trim(),\n file: filepath,\n });\n }\n\n // Extract property wrappers\n const wrapperSet = new Set<string>();\n while ((match = WRAPPER_RE.exec(content)) !== null) {\n wrapperSet.add(match[1]);\n }\n result.property_wrappers = Array.from(wrapperSet);\n\n // Extract error handling patterns\n if (content.includes('do {') || content.includes('do{')) {\n result.error_handling.push('do-catch');\n }\n if (content.includes('throws')) {\n result.error_handling.push('throws');\n }\n if (content.includes('Result<')) {\n result.error_handling.push('Result type');\n }\n if (content.includes('try?')) {\n result.error_handling.push('try?');\n }\n if (content.includes('try!')) {\n result.error_handling.push('try!');\n }\n\n return result;\n}\n\nexport function mergeSwiftResults(results: SwiftParseResult[]): SwiftParseResult {\n const merged: SwiftParseResult = {\n imports: [],\n types: [],\n functions: [],\n property_wrappers: [],\n error_handling: [],\n frameworks_used: [],\n };\n\n const importCounts = new Map<string, number>();\n const wrapperCounts = new Map<string, number>();\n const errorCounts = new Map<string, number>();\n const frameworkSet = new Set<string>();\n\n for (const r of results) {\n for (const imp of r.imports) {\n importCounts.set(imp, (importCounts.get(imp) || 0) + 1);\n }\n merged.types.push(...r.types);\n merged.functions.push(...r.functions);\n for (const w of r.property_wrappers) {\n wrapperCounts.set(w, (wrapperCounts.get(w) || 0) + 1);\n }\n for (const e of r.error_handling) {\n errorCounts.set(e, (errorCounts.get(e) || 0) + 1);\n }\n for (const fw of r.frameworks_used) {\n frameworkSet.add(fw);\n }\n }\n\n // Sort imports by count descending, top 20\n merged.imports = Array.from(importCounts.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 20)\n .map(([mod, count]) => mod);\n\n // Sort wrappers by count, top 10\n merged.property_wrappers = Array.from(wrapperCounts.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 10)\n .map(([w]) => w);\n\n // Sort errors by count, top 10\n merged.error_handling = Array.from(errorCounts.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 10)\n .map(([p]) => p);\n\n merged.frameworks_used = Array.from(frameworkSet).sort();\n\n // Limit types and functions\n merged.types = merged.types.slice(0, 100);\n merged.functions = merged.functions.slice(0, 100);\n\n return merged;\n}\n","/**\n * TypeScript/JavaScript AST-level parser — extracts imports, types, functions,\n * and error handling patterns.\n *\n * Ported from knowledge-tree/extract_project_keywords.py parse_ts_file()\n */\n\nexport interface TsParseResult {\n imports: string[];\n types: Array<{\n kind: string;\n name: string;\n file: string;\n }>;\n functions: Array<{\n name: string;\n params: string;\n file: string;\n }>;\n error_handling: string[];\n}\n\nconst IMPORT_RE = /import\\s+.*?from\\s+['\"]([^'\"]+)['\"]/g;\nconst TYPE_RE = /\\b(interface|type|class|enum)\\s+(\\w+)/g;\nconst FUNC_RE = /\\bfunction\\s+(\\w+)\\s*\\(([^)]*)\\)/g;\nconst ARROW_RE = /\\bconst\\s+(\\w+)\\s*=\\s*\\([^)]*\\)\\s*(?::\\s*\\w+)?\\s*=>/g;\n\nexport function parseTsFile(filepath: string, content: string): TsParseResult {\n const result: TsParseResult = {\n imports: [],\n types: [],\n functions: [],\n error_handling: [],\n };\n\n let match: RegExpExecArray | null;\n\n // Extract imports\n while ((match = IMPORT_RE.exec(content)) !== null) {\n result.imports.push(match[1]);\n }\n\n // Extract type/interface/class/enum declarations\n while ((match = TYPE_RE.exec(content)) !== null) {\n result.types.push({\n kind: match[1],\n name: match[2],\n file: filepath,\n });\n }\n\n // Extract function declarations\n while ((match = FUNC_RE.exec(content)) !== null) {\n result.functions.push({\n name: match[1],\n params: (match[2] || '').trim(),\n file: filepath,\n });\n }\n\n // Extract arrow functions\n while ((match = ARROW_RE.exec(content)) !== null) {\n result.functions.push({\n name: match[1],\n params: '',\n file: filepath,\n });\n }\n\n // Extract error handling patterns\n if (content.includes('try {') || content.includes('try{')) {\n result.error_handling.push('try-catch');\n }\n if (content.includes('Promise')) {\n result.error_handling.push('Promise');\n }\n if (content.includes('.catch(')) {\n result.error_handling.push('.catch()');\n }\n\n return result;\n}\n\nexport function mergeTsResults(results: TsParseResult[]): TsParseResult {\n const merged: TsParseResult = {\n imports: [],\n types: [],\n functions: [],\n error_handling: [],\n };\n\n const importCounts = new Map<string, number>();\n const errorCounts = new Map<string, number>();\n\n for (const r of results) {\n for (const imp of r.imports) {\n importCounts.set(imp, (importCounts.get(imp) || 0) + 1);\n }\n merged.types.push(...r.types);\n merged.functions.push(...r.functions);\n for (const e of r.error_handling) {\n errorCounts.set(e, (errorCounts.get(e) || 0) + 1);\n }\n }\n\n merged.imports = Array.from(importCounts.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 20)\n .map(([mod]) => mod);\n\n merged.error_handling = Array.from(errorCounts.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 10)\n .map(([p]) => p);\n\n merged.types = merged.types.slice(0, 100);\n merged.functions = merged.functions.slice(0, 100);\n\n return merged;\n}\n","/**\n * Python AST-level parser — extracts imports, classes, functions, docstrings,\n * and error handling patterns.\n *\n * Ported from knowledge-tree/extract_project_keywords.py parse_python_file()\n */\n\nexport interface PythonParseResult {\n imports: string[];\n types: Array<{\n kind: string;\n name: string;\n bases: string[];\n file: string;\n }>;\n functions: Array<{\n name: string;\n params: string;\n file: string;\n }>;\n docstrings: string[];\n error_handling: string[];\n}\n\nconst IMPORT_RE = /^(?:import|from)\\s+(\\w+)/gm;\nconst CLASS_RE = /\\bclass\\s+(\\w+)(?:\\s*\\(([^)]+)\\))?/g;\nconst FUNC_RE = /\\bdef\\s+(\\w+)\\s*\\(([^)]*)\\)/g;\nconst DOCSTRING_RE = /\"\"\"([^\"]{20,300})\"\"\"/g;\n\nexport function parsePythonFile(filepath: string, content: string): PythonParseResult {\n const result: PythonParseResult = {\n imports: [],\n types: [],\n functions: [],\n docstrings: [],\n error_handling: [],\n };\n\n let match: RegExpExecArray | null;\n\n // Extract imports\n while ((match = IMPORT_RE.exec(content)) !== null) {\n result.imports.push(match[1]);\n }\n\n // Extract docstrings (module, class, function level) — high-signal domain intent\n while ((match = DOCSTRING_RE.exec(content)) !== null) {\n const firstSentence = match[1].trim().split('\\n')[0].slice(0, 120);\n if (firstSentence.length > 15) {\n result.docstrings.push(firstSentence);\n }\n }\n\n // Extract class declarations\n while ((match = CLASS_RE.exec(content)) !== null) {\n const bases = (match[2] || '')\n .split(',')\n .map(b => b.trim())\n .filter(Boolean);\n result.types.push({\n kind: 'class',\n name: match[1],\n bases,\n file: filepath,\n });\n }\n\n // Extract function declarations\n while ((match = FUNC_RE.exec(content)) !== null) {\n const name = match[1];\n // Skip dunder methods (__init__, __str__)\n if (name.startsWith('__') && name.endsWith('__')) continue;\n result.functions.push({\n name,\n params: (match[2] || '').trim(),\n file: filepath,\n });\n }\n\n // Extract error handling patterns\n if (content.includes('try:')) {\n result.error_handling.push('try-except');\n }\n if (content.includes('raise')) {\n result.error_handling.push('raise');\n }\n\n return result;\n}\n\nexport function mergePythonResults(results: PythonParseResult[]): PythonParseResult {\n const merged: PythonParseResult = {\n imports: [],\n types: [],\n functions: [],\n docstrings: [],\n error_handling: [],\n };\n\n const importCounts = new Map<string, number>();\n const errorCounts = new Map<string, number>();\n\n for (const r of results) {\n for (const imp of r.imports) {\n importCounts.set(imp, (importCounts.get(imp) || 0) + 1);\n }\n merged.types.push(...r.types);\n merged.functions.push(...r.functions);\n merged.docstrings.push(...r.docstrings);\n for (const e of r.error_handling) {\n errorCounts.set(e, (errorCounts.get(e) || 0) + 1);\n }\n }\n\n merged.imports = Array.from(importCounts.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 20)\n .map(([mod]) => mod);\n\n merged.error_handling = Array.from(errorCounts.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 10)\n .map(([p]) => p);\n\n merged.types = merged.types.slice(0, 100);\n merged.functions = merged.functions.slice(0, 100);\n merged.docstrings = merged.docstrings.slice(0, 20);\n\n return merged;\n}\n","/**\n * C++/Arduino AST-level parser — extracts #include, types, functions,\n * and error handling patterns.\n *\n * Ported from knowledge-tree/extract_project_keywords.py parse_cpp_file()\n */\n\nexport interface CppParseResult {\n imports: string[];\n types: Array<{\n kind: string;\n name: string;\n file: string;\n }>;\n functions: Array<{\n name: string;\n file: string;\n }>;\n error_handling: string[];\n}\n\nconst INCLUDE_RE = /#include\\s*[<\"]([^>\"]+)[>\"]/g;\nconst TYPE_RE = /\\b(?:class|struct|enum)\\s+(\\w+)/g;\nconst FUNC_RE = /\\b(?:void|int|float|double|char|bool|String|uint8_t|uint16_t|uint32_t)\\s+(\\w+)\\s*\\(/g;\n\nexport function parseCppFile(filepath: string, content: string): CppParseResult {\n const result: CppParseResult = {\n imports: [],\n types: [],\n functions: [],\n error_handling: [],\n };\n\n let match: RegExpExecArray | null;\n\n // Extract #include\n while ((match = INCLUDE_RE.exec(content)) !== null) {\n result.imports.push(match[1]);\n }\n\n // Extract type declarations\n while ((match = TYPE_RE.exec(content)) !== null) {\n result.types.push({\n kind: 'cpp',\n name: match[1],\n file: filepath,\n });\n }\n\n // Extract function declarations\n while ((match = FUNC_RE.exec(content)) !== null) {\n result.functions.push({\n name: match[1],\n file: filepath,\n });\n }\n\n // Extract error handling patterns\n if (/\\btry\\b|\\bthrow\\b|\\bcatch\\b/.test(content)) {\n result.error_handling.push('try/throw/catch');\n }\n\n return result;\n}\n\nexport function mergeCppResults(results: CppParseResult[]): CppParseResult {\n const merged: CppParseResult = {\n imports: [],\n types: [],\n functions: [],\n error_handling: [],\n };\n\n const importCounts = new Map<string, number>();\n\n for (const r of results) {\n for (const imp of r.imports) {\n importCounts.set(imp, (importCounts.get(imp) || 0) + 1);\n }\n merged.types.push(...r.types);\n merged.functions.push(...r.functions);\n merged.error_handling.push(...r.error_handling);\n }\n\n merged.imports = Array.from(importCounts.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 20)\n .map(([mod]) => mod);\n\n // Deduplicate error handling\n merged.error_handling = [...new Set(merged.error_handling)];\n\n return merged;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/parsers/swift.ts","../../src/parsers/typescript.ts","../../src/parsers/python.ts","../../src/parsers/cpp.ts","../../src/parsers/syllabusParser.ts"],"names":["IMPORT_RE","TYPE_RE","FUNC_RE"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Swift AST-level parser — extracts imports, types, functions, property wrappers,\n * error handling patterns, and framework usage from Swift source files.\n *\n * Ported from knowledge-tree/extract_project_keywords.py parse_swift_file()\n */\n\nexport interface SwiftParseResult {\n imports: string[];\n types: Array<{\n kind: string;\n name: string;\n conforms_to: string[];\n file: string;\n }>;\n functions: Array<{\n name: string;\n params: string;\n returns: string;\n file: string;\n }>;\n property_wrappers: string[];\n error_handling: string[];\n frameworks_used: string[];\n}\n\nconst IMPORT_RE = /^import\\s+(\\w+)/gm;\nconst TYPE_RE = /\\b(class|struct|enum|protocol)\\s+(\\w+)(?:\\s*:\\s*([^{]+))?/g;\nconst FUNC_RE = /\\bfunc\\s+(\\w+)\\s*\\(([^)]*)\\)(?:\\s*->\\s*([^{]+))?/g;\nconst WRAPPER_RE = /@(State|Binding|ObservedObject|StateObject|Published|Environment|EnvironmentObject|AppStorage|SceneStorage|FocusState|Observable)\\b/g;\nconst FRAMEWORK_USAGE_RE = /\\b(URLSession|URLRequest|JSONSerialization|JSONDecoder|JSONEncoder|Task|DispatchQueue|Timer|NotificationCenter|UserDefaults|FileManager|Bundle)\\b/g;\n\nexport function parseSwiftFile(filepath: string, content: string): SwiftParseResult {\n const result: SwiftParseResult = {\n imports: [],\n types: [],\n functions: [],\n property_wrappers: [],\n error_handling: [],\n frameworks_used: [],\n };\n\n // Extract imports\n let match: RegExpExecArray | null;\n while ((match = IMPORT_RE.exec(content)) !== null) {\n result.imports.push(match[1]);\n }\n\n // Extract framework usage (types used in body, not declarations)\n const fwSeen = new Set<string>();\n while ((match = FRAMEWORK_USAGE_RE.exec(content)) !== null) {\n if (!fwSeen.has(match[1])) {\n fwSeen.add(match[1]);\n result.frameworks_used.push(match[1]);\n }\n }\n\n // Extract type declarations\n while ((match = TYPE_RE.exec(content)) !== null) {\n const conforms = (match[3] || '')\n .split(',')\n .map(p => p.trim())\n .filter(Boolean);\n result.types.push({\n kind: match[1],\n name: match[2],\n conforms_to: conforms,\n file: filepath,\n });\n }\n\n // Extract function signatures\n while ((match = FUNC_RE.exec(content)) !== null) {\n const name = match[1];\n if (name.startsWith('_')) continue;\n result.functions.push({\n name,\n params: (match[2] || '').trim(),\n returns: (match[3] || '').trim(),\n file: filepath,\n });\n }\n\n // Extract property wrappers\n const wrapperSet = new Set<string>();\n while ((match = WRAPPER_RE.exec(content)) !== null) {\n wrapperSet.add(match[1]);\n }\n result.property_wrappers = Array.from(wrapperSet);\n\n // Extract error handling patterns\n if (content.includes('do {') || content.includes('do{')) {\n result.error_handling.push('do-catch');\n }\n if (content.includes('throws')) {\n result.error_handling.push('throws');\n }\n if (content.includes('Result<')) {\n result.error_handling.push('Result type');\n }\n if (content.includes('try?')) {\n result.error_handling.push('try?');\n }\n if (content.includes('try!')) {\n result.error_handling.push('try!');\n }\n\n return result;\n}\n\nexport function mergeSwiftResults(results: SwiftParseResult[]): SwiftParseResult {\n const merged: SwiftParseResult = {\n imports: [],\n types: [],\n functions: [],\n property_wrappers: [],\n error_handling: [],\n frameworks_used: [],\n };\n\n const importCounts = new Map<string, number>();\n const wrapperCounts = new Map<string, number>();\n const errorCounts = new Map<string, number>();\n const frameworkSet = new Set<string>();\n\n for (const r of results) {\n for (const imp of r.imports) {\n importCounts.set(imp, (importCounts.get(imp) || 0) + 1);\n }\n merged.types.push(...r.types);\n merged.functions.push(...r.functions);\n for (const w of r.property_wrappers) {\n wrapperCounts.set(w, (wrapperCounts.get(w) || 0) + 1);\n }\n for (const e of r.error_handling) {\n errorCounts.set(e, (errorCounts.get(e) || 0) + 1);\n }\n for (const fw of r.frameworks_used) {\n frameworkSet.add(fw);\n }\n }\n\n // Sort imports by count descending, top 20\n merged.imports = Array.from(importCounts.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 20)\n .map(([mod, count]) => mod);\n\n // Sort wrappers by count, top 10\n merged.property_wrappers = Array.from(wrapperCounts.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 10)\n .map(([w]) => w);\n\n // Sort errors by count, top 10\n merged.error_handling = Array.from(errorCounts.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 10)\n .map(([p]) => p);\n\n merged.frameworks_used = Array.from(frameworkSet).sort();\n\n // Limit types and functions\n merged.types = merged.types.slice(0, 100);\n merged.functions = merged.functions.slice(0, 100);\n\n return merged;\n}\n","/**\n * TypeScript/JavaScript AST-level parser — extracts imports, types, functions,\n * and error handling patterns.\n *\n * Ported from knowledge-tree/extract_project_keywords.py parse_ts_file()\n */\n\nexport interface TsParseResult {\n imports: string[];\n types: Array<{\n kind: string;\n name: string;\n file: string;\n }>;\n functions: Array<{\n name: string;\n params: string;\n file: string;\n }>;\n error_handling: string[];\n}\n\nconst IMPORT_RE = /import\\s+.*?from\\s+['\"]([^'\"]+)['\"]/g;\nconst TYPE_RE = /\\b(interface|type|class|enum)\\s+(\\w+)/g;\nconst FUNC_RE = /\\bfunction\\s+(\\w+)\\s*\\(([^)]*)\\)/g;\nconst ARROW_RE = /\\bconst\\s+(\\w+)\\s*=\\s*\\([^)]*\\)\\s*(?::\\s*\\w+)?\\s*=>/g;\n\nexport function parseTsFile(filepath: string, content: string): TsParseResult {\n const result: TsParseResult = {\n imports: [],\n types: [],\n functions: [],\n error_handling: [],\n };\n\n let match: RegExpExecArray | null;\n\n // Extract imports\n while ((match = IMPORT_RE.exec(content)) !== null) {\n result.imports.push(match[1]);\n }\n\n // Extract type/interface/class/enum declarations\n while ((match = TYPE_RE.exec(content)) !== null) {\n result.types.push({\n kind: match[1],\n name: match[2],\n file: filepath,\n });\n }\n\n // Extract function declarations\n while ((match = FUNC_RE.exec(content)) !== null) {\n result.functions.push({\n name: match[1],\n params: (match[2] || '').trim(),\n file: filepath,\n });\n }\n\n // Extract arrow functions\n while ((match = ARROW_RE.exec(content)) !== null) {\n result.functions.push({\n name: match[1],\n params: '',\n file: filepath,\n });\n }\n\n // Extract error handling patterns\n if (content.includes('try {') || content.includes('try{')) {\n result.error_handling.push('try-catch');\n }\n if (content.includes('Promise')) {\n result.error_handling.push('Promise');\n }\n if (content.includes('.catch(')) {\n result.error_handling.push('.catch()');\n }\n\n return result;\n}\n\nexport function mergeTsResults(results: TsParseResult[]): TsParseResult {\n const merged: TsParseResult = {\n imports: [],\n types: [],\n functions: [],\n error_handling: [],\n };\n\n const importCounts = new Map<string, number>();\n const errorCounts = new Map<string, number>();\n\n for (const r of results) {\n for (const imp of r.imports) {\n importCounts.set(imp, (importCounts.get(imp) || 0) + 1);\n }\n merged.types.push(...r.types);\n merged.functions.push(...r.functions);\n for (const e of r.error_handling) {\n errorCounts.set(e, (errorCounts.get(e) || 0) + 1);\n }\n }\n\n merged.imports = Array.from(importCounts.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 20)\n .map(([mod]) => mod);\n\n merged.error_handling = Array.from(errorCounts.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 10)\n .map(([p]) => p);\n\n merged.types = merged.types.slice(0, 100);\n merged.functions = merged.functions.slice(0, 100);\n\n return merged;\n}\n","/**\n * Python AST-level parser — extracts imports, classes, functions, docstrings,\n * and error handling patterns.\n *\n * Ported from knowledge-tree/extract_project_keywords.py parse_python_file()\n */\n\nexport interface PythonParseResult {\n imports: string[];\n types: Array<{\n kind: string;\n name: string;\n bases: string[];\n file: string;\n }>;\n functions: Array<{\n name: string;\n params: string;\n file: string;\n }>;\n docstrings: string[];\n error_handling: string[];\n}\n\nconst IMPORT_RE = /^(?:import|from)\\s+(\\w+)/gm;\nconst CLASS_RE = /\\bclass\\s+(\\w+)(?:\\s*\\(([^)]+)\\))?/g;\nconst FUNC_RE = /\\bdef\\s+(\\w+)\\s*\\(([^)]*)\\)/g;\nconst DOCSTRING_RE = /\"\"\"([^\"]{20,300})\"\"\"/g;\n\nexport function parsePythonFile(filepath: string, content: string): PythonParseResult {\n const result: PythonParseResult = {\n imports: [],\n types: [],\n functions: [],\n docstrings: [],\n error_handling: [],\n };\n\n let match: RegExpExecArray | null;\n\n // Extract imports\n while ((match = IMPORT_RE.exec(content)) !== null) {\n result.imports.push(match[1]);\n }\n\n // Extract docstrings (module, class, function level) — high-signal domain intent\n while ((match = DOCSTRING_RE.exec(content)) !== null) {\n const firstSentence = match[1].trim().split('\\n')[0].slice(0, 120);\n if (firstSentence.length > 15) {\n result.docstrings.push(firstSentence);\n }\n }\n\n // Extract class declarations\n while ((match = CLASS_RE.exec(content)) !== null) {\n const bases = (match[2] || '')\n .split(',')\n .map(b => b.trim())\n .filter(Boolean);\n result.types.push({\n kind: 'class',\n name: match[1],\n bases,\n file: filepath,\n });\n }\n\n // Extract function declarations\n while ((match = FUNC_RE.exec(content)) !== null) {\n const name = match[1];\n // Skip dunder methods (__init__, __str__)\n if (name.startsWith('__') && name.endsWith('__')) continue;\n result.functions.push({\n name,\n params: (match[2] || '').trim(),\n file: filepath,\n });\n }\n\n // Extract error handling patterns\n if (content.includes('try:')) {\n result.error_handling.push('try-except');\n }\n if (content.includes('raise')) {\n result.error_handling.push('raise');\n }\n\n return result;\n}\n\nexport function mergePythonResults(results: PythonParseResult[]): PythonParseResult {\n const merged: PythonParseResult = {\n imports: [],\n types: [],\n functions: [],\n docstrings: [],\n error_handling: [],\n };\n\n const importCounts = new Map<string, number>();\n const errorCounts = new Map<string, number>();\n\n for (const r of results) {\n for (const imp of r.imports) {\n importCounts.set(imp, (importCounts.get(imp) || 0) + 1);\n }\n merged.types.push(...r.types);\n merged.functions.push(...r.functions);\n merged.docstrings.push(...r.docstrings);\n for (const e of r.error_handling) {\n errorCounts.set(e, (errorCounts.get(e) || 0) + 1);\n }\n }\n\n merged.imports = Array.from(importCounts.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 20)\n .map(([mod]) => mod);\n\n merged.error_handling = Array.from(errorCounts.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 10)\n .map(([p]) => p);\n\n merged.types = merged.types.slice(0, 100);\n merged.functions = merged.functions.slice(0, 100);\n merged.docstrings = merged.docstrings.slice(0, 20);\n\n return merged;\n}\n","/**\n * C++/Arduino AST-level parser — extracts #include, types, functions,\n * and error handling patterns.\n *\n * Ported from knowledge-tree/extract_project_keywords.py parse_cpp_file()\n */\n\nexport interface CppParseResult {\n imports: string[];\n types: Array<{\n kind: string;\n name: string;\n file: string;\n }>;\n functions: Array<{\n name: string;\n file: string;\n }>;\n error_handling: string[];\n}\n\nconst INCLUDE_RE = /#include\\s*[<\"]([^>\"]+)[>\"]/g;\nconst TYPE_RE = /\\b(?:class|struct|enum)\\s+(\\w+)/g;\nconst FUNC_RE = /\\b(?:void|int|float|double|char|bool|String|uint8_t|uint16_t|uint32_t)\\s+(\\w+)\\s*\\(/g;\n\nexport function parseCppFile(filepath: string, content: string): CppParseResult {\n const result: CppParseResult = {\n imports: [],\n types: [],\n functions: [],\n error_handling: [],\n };\n\n let match: RegExpExecArray | null;\n\n // Extract #include\n while ((match = INCLUDE_RE.exec(content)) !== null) {\n result.imports.push(match[1]);\n }\n\n // Extract type declarations\n while ((match = TYPE_RE.exec(content)) !== null) {\n result.types.push({\n kind: 'cpp',\n name: match[1],\n file: filepath,\n });\n }\n\n // Extract function declarations\n while ((match = FUNC_RE.exec(content)) !== null) {\n result.functions.push({\n name: match[1],\n file: filepath,\n });\n }\n\n // Extract error handling patterns\n if (/\\btry\\b|\\bthrow\\b|\\bcatch\\b/.test(content)) {\n result.error_handling.push('try/throw/catch');\n }\n\n return result;\n}\n\nexport function mergeCppResults(results: CppParseResult[]): CppParseResult {\n const merged: CppParseResult = {\n imports: [],\n types: [],\n functions: [],\n error_handling: [],\n };\n\n const importCounts = new Map<string, number>();\n\n for (const r of results) {\n for (const imp of r.imports) {\n importCounts.set(imp, (importCounts.get(imp) || 0) + 1);\n }\n merged.types.push(...r.types);\n merged.functions.push(...r.functions);\n merged.error_handling.push(...r.error_handling);\n }\n\n merged.imports = Array.from(importCounts.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 20)\n .map(([mod]) => mod);\n\n // Deduplicate error handling\n merged.error_handling = [...new Set(merged.error_handling)];\n\n return merged;\n}\n","/**\n * Syllabus Parser — parses structured Markdown, numbered text, or outlines\n * into a structured ParsedSyllabus object with traceable line references.\n */\n\nexport interface SyllabusTopic {\n id: string;\n title: string;\n unitId: string;\n unitTitle: string;\n description: string;\n learningObjectives: string[];\n keywords: string[];\n rawLineStart: number;\n rawLineEnd: number;\n}\n\nexport interface SyllabusUnit {\n id: string;\n title: string;\n order: number;\n topics: SyllabusTopic[];\n}\n\nexport interface ParsedSyllabus {\n subject: {\n title: string;\n domain?: string;\n gradeBand?: [number, number];\n description?: string;\n estimatedHours?: number;\n };\n units: SyllabusUnit[];\n allTopics: SyllabusTopic[];\n extractedKeywords: string[];\n rawText: string;\n}\n\nconst STOP_WORDS = new Set([\n 'and', 'the', 'for', 'with', 'from', 'that', 'this', 'into', 'when', 'while',\n 'using', 'their', 'your', 'each', 'how', 'why', 'what', 'between', 'through',\n 'about', 'trong', 'nhung', 'cac', 'cua', 'cho', 'voi', 'duoc', 'khong', 'theo',\n 'tren', 'duoi', 'va', 'hoac', 'thi', 'la', 'nhu',\n]);\n\n/**\n * Heuristically extracts meaningful terminology keywords from text tokens.\n */\nfunction extractTokens(text: string): string[] {\n const words = text\n .toLowerCase()\n .replace(/[^a-z0-9à-ỹ\\s-]/gi, ' ')\n .split(/\\s+/)\n .filter((w) => w.length >= 3 && !STOP_WORDS.has(w));\n return [...new Set(words)];\n}\n\n/**\n * Detect grade band from raw text patterns like \"Lớp 7 - Lớp 9\", \"Grade Band: 15-18\", \"12 - 15 tuổi\".\n */\nfunction extractGradeBand(text: string): [number, number] | undefined {\n const gbMatch = text.match(/(?:grade\\s*band|độ\\s*tuổi|lớp)\\s*[:=]?\\s*(?:lớp\\s*)?(\\d{1,2})\\s*(?:-|đến|to)\\s*(?:lớp\\s*)?(\\d{1,2})/i);\n if (gbMatch && gbMatch[1] && gbMatch[2]) {\n const min = parseInt(gbMatch[1], 10);\n const max = parseInt(gbMatch[2], 10);\n return [Math.min(min, max), Math.max(min, max)];\n }\n return undefined;\n}\n\n/**\n * Detect domain from text keywords.\n */\nfunction extractDomain(text: string): string | undefined {\n const lower = text.toLowerCase();\n if (lower.includes('computer science') || lower.includes('lập trình') || lower.includes('algorithm') || lower.includes('software')) return 'software';\n if (lower.includes('toán') || lower.includes('geometry') || lower.includes('algebra') || lower.includes('hình học') || lower.includes('mathematics')) return 'math';\n if (lower.includes('vật lý') || lower.includes('hóa học') || lower.includes('sinh học') || lower.includes('physics') || lower.includes('chemistry') || lower.includes('biology') || lower.includes('science')) return 'science';\n if (lower.includes('tiếng') || lower.includes('ngữ văn') || lower.includes('grammar') || lower.includes('language') || lower.includes('writing') || lower.includes('literature')) return 'language';\n return undefined;\n}\n\n/**\n * Main syllabus parser function.\n */\nexport function parseSyllabus(rawText: string): ParsedSyllabus {\n const lines = rawText.split(/\\r?\\n/);\n let subjectTitle = '';\n let subjectDesc = '';\n\n const units: SyllabusUnit[] = [];\n const allTopics: SyllabusTopic[] = [];\n const globalKeywordsSet = new Set<string>();\n\n let currentUnit: SyllabusUnit | null = null;\n let currentTopic: SyllabusTopic | null = null;\n let unitIndex = 0;\n let topicIndex = 0;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]!.trim();\n const lineNum = i + 1;\n if (!line) continue;\n\n // 1. Level 1 Heading: Subject Title\n if (line.startsWith('# ') && !subjectTitle) {\n subjectTitle = line.replace(/^#\\s+/, '').trim();\n continue;\n }\n\n // 2. Metadata lines at root\n if (!currentUnit) {\n if (line.toLowerCase().startsWith('môn học:') || line.toLowerCase().startsWith('subject:')) {\n const val = line.split(':')[1]?.trim() || '';\n if (val && !subjectTitle) subjectTitle = val;\n }\n if (line.toLowerCase().startsWith('mô tả:') || line.toLowerCase().startsWith('description:')) {\n subjectDesc = line.split(':')[1]?.trim() || '';\n }\n }\n\n // 3. Level 2 Heading: Unit / Chapter / Module\n const isUnitHeading = /^##\\s+(?:chương|module|unit|phần|chủ đề)\\s*(\\d+|[ivx]+)?[:.-]?\\s*(.*)/i.test(line)\n || /^##\\s+([^#].*)/.test(line);\n\n if (isUnitHeading) {\n if (currentTopic) {\n currentTopic.rawLineEnd = lineNum - 1;\n currentTopic = null;\n }\n unitIndex += 1;\n const titleMatch = line.replace(/^##\\s+/, '').trim();\n currentUnit = {\n id: `U${String(unitIndex).padStart(2, '0')}`,\n title: titleMatch,\n order: unitIndex,\n topics: [],\n };\n units.push(currentUnit);\n continue;\n }\n\n // 4. Topic heading inside Unit: \"- **Bài X: ...**\", \"### Topic ...\", \"1. Bài ...\", or \"- **...**\"\n const isTopicItem = /^(?:-\\s*\\*\\*(?:bài|topic|lesson|chủ đề)\\s*(\\d+(?:\\.\\d+)?|\\w+)?[:.-]?\\s*(.*?)\\*\\*)/i.exec(line)\n || /^###\\s+(?:bài|topic|lesson)?\\s*(\\d+(?:\\.\\d+)?|\\w+)?[:.-]?\\s*(.*)/i.exec(line)\n || /^-\\s+\\*\\*(.*?)\\*\\*/.exec(line)\n || /^(\\d+)\\.\\s+(?:(?:\\*\\*)?(?:bài|topic|lesson)?\\s*(\\d+(?:\\.\\d+)?|\\w+)?[:.-]?\\s*(.*?)(?:\\*\\*)?)$/i.exec(line);\n\n if (isTopicItem) {\n if (currentTopic) {\n currentTopic.rawLineEnd = lineNum - 1;\n }\n if (!currentUnit) {\n unitIndex += 1;\n currentUnit = {\n id: `U${String(unitIndex).padStart(2, '0')}`,\n title: subjectTitle || 'General',\n order: unitIndex,\n topics: [],\n };\n units.push(currentUnit);\n }\n topicIndex += 1;\n const rawName = (isTopicItem[3] || isTopicItem[2] || isTopicItem[1] || `Topic ${topicIndex}`).trim();\n currentTopic = {\n id: `T${String(topicIndex).padStart(2, '0')}`,\n title: rawName,\n unitId: currentUnit.id,\n unitTitle: currentUnit.title,\n description: '',\n learningObjectives: [],\n keywords: [],\n rawLineStart: lineNum,\n rawLineEnd: lineNum,\n };\n currentUnit.topics.push(currentTopic);\n allTopics.push(currentTopic);\n continue;\n }\n\n // 5. Content lines inside Topic\n if (currentTopic) {\n currentTopic.rawLineEnd = lineNum;\n const stripped = line.replace(/^[-*•\\s]+/, '').trim();\n\n // Objectives line\n if (stripped.toLowerCase().startsWith('mục tiêu:') || stripped.toLowerCase().startsWith('objectives:')) {\n const content = stripped.replace(/^(?:mục tiêu|objectives):\\s*/i, '').trim();\n if (content) currentTopic.learningObjectives.push(content);\n continue;\n }\n\n // Keywords line\n if (stripped.toLowerCase().startsWith('từ khóa:') || stripped.toLowerCase().startsWith('keywords:')) {\n const rawKw = stripped.replace(/^(?:từ khóa|keywords):\\s*/i, '').trim();\n const tokens = rawKw.split(/[,;]+/).map((k) => k.trim()).filter(Boolean);\n for (const tok of tokens) {\n currentTopic.keywords.push(tok);\n globalKeywordsSet.add(tok);\n }\n continue;\n }\n\n // General description line\n if (currentTopic.description) {\n currentTopic.description += ' ' + stripped;\n } else {\n currentTopic.description = stripped;\n }\n\n // Harvest tokens\n for (const tok of extractTokens(stripped)) {\n if (tok.length >= 4) globalKeywordsSet.add(tok);\n }\n }\n }\n\n // Close last topic if open\n if (currentTopic) {\n currentTopic.rawLineEnd = lines.length;\n }\n\n // Fallback subject title\n if (!subjectTitle && units.length > 0) {\n subjectTitle = units[0]?.title || 'Untitled Subject';\n }\n\n return {\n subject: {\n title: subjectTitle || 'Untitled Subject',\n domain: extractDomain(rawText),\n gradeBand: extractGradeBand(rawText),\n description: subjectDesc,\n },\n units,\n allTopics,\n extractedKeywords: [...globalKeywordsSet],\n rawText,\n };\n}\n"]}
|
package/dist/parsers/index.d.cts
CHANGED
|
@@ -1,98 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* error handling patterns, and framework usage from Swift source files.
|
|
4
|
-
*
|
|
5
|
-
* Ported from knowledge-tree/extract_project_keywords.py parse_swift_file()
|
|
6
|
-
*/
|
|
7
|
-
interface SwiftParseResult {
|
|
8
|
-
imports: string[];
|
|
9
|
-
types: Array<{
|
|
10
|
-
kind: string;
|
|
11
|
-
name: string;
|
|
12
|
-
conforms_to: string[];
|
|
13
|
-
file: string;
|
|
14
|
-
}>;
|
|
15
|
-
functions: Array<{
|
|
16
|
-
name: string;
|
|
17
|
-
params: string;
|
|
18
|
-
returns: string;
|
|
19
|
-
file: string;
|
|
20
|
-
}>;
|
|
21
|
-
property_wrappers: string[];
|
|
22
|
-
error_handling: string[];
|
|
23
|
-
frameworks_used: string[];
|
|
24
|
-
}
|
|
25
|
-
declare function parseSwiftFile(filepath: string, content: string): SwiftParseResult;
|
|
26
|
-
declare function mergeSwiftResults(results: SwiftParseResult[]): SwiftParseResult;
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* TypeScript/JavaScript AST-level parser — extracts imports, types, functions,
|
|
30
|
-
* and error handling patterns.
|
|
31
|
-
*
|
|
32
|
-
* Ported from knowledge-tree/extract_project_keywords.py parse_ts_file()
|
|
33
|
-
*/
|
|
34
|
-
interface TsParseResult {
|
|
35
|
-
imports: string[];
|
|
36
|
-
types: Array<{
|
|
37
|
-
kind: string;
|
|
38
|
-
name: string;
|
|
39
|
-
file: string;
|
|
40
|
-
}>;
|
|
41
|
-
functions: Array<{
|
|
42
|
-
name: string;
|
|
43
|
-
params: string;
|
|
44
|
-
file: string;
|
|
45
|
-
}>;
|
|
46
|
-
error_handling: string[];
|
|
47
|
-
}
|
|
48
|
-
declare function parseTsFile(filepath: string, content: string): TsParseResult;
|
|
49
|
-
declare function mergeTsResults(results: TsParseResult[]): TsParseResult;
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Python AST-level parser — extracts imports, classes, functions, docstrings,
|
|
53
|
-
* and error handling patterns.
|
|
54
|
-
*
|
|
55
|
-
* Ported from knowledge-tree/extract_project_keywords.py parse_python_file()
|
|
56
|
-
*/
|
|
57
|
-
interface PythonParseResult {
|
|
58
|
-
imports: string[];
|
|
59
|
-
types: Array<{
|
|
60
|
-
kind: string;
|
|
61
|
-
name: string;
|
|
62
|
-
bases: string[];
|
|
63
|
-
file: string;
|
|
64
|
-
}>;
|
|
65
|
-
functions: Array<{
|
|
66
|
-
name: string;
|
|
67
|
-
params: string;
|
|
68
|
-
file: string;
|
|
69
|
-
}>;
|
|
70
|
-
docstrings: string[];
|
|
71
|
-
error_handling: string[];
|
|
72
|
-
}
|
|
73
|
-
declare function parsePythonFile(filepath: string, content: string): PythonParseResult;
|
|
74
|
-
declare function mergePythonResults(results: PythonParseResult[]): PythonParseResult;
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* C++/Arduino AST-level parser — extracts #include, types, functions,
|
|
78
|
-
* and error handling patterns.
|
|
79
|
-
*
|
|
80
|
-
* Ported from knowledge-tree/extract_project_keywords.py parse_cpp_file()
|
|
81
|
-
*/
|
|
82
|
-
interface CppParseResult {
|
|
83
|
-
imports: string[];
|
|
84
|
-
types: Array<{
|
|
85
|
-
kind: string;
|
|
86
|
-
name: string;
|
|
87
|
-
file: string;
|
|
88
|
-
}>;
|
|
89
|
-
functions: Array<{
|
|
90
|
-
name: string;
|
|
91
|
-
file: string;
|
|
92
|
-
}>;
|
|
93
|
-
error_handling: string[];
|
|
94
|
-
}
|
|
95
|
-
declare function parseCppFile(filepath: string, content: string): CppParseResult;
|
|
96
|
-
declare function mergeCppResults(results: CppParseResult[]): CppParseResult;
|
|
97
|
-
|
|
98
|
-
export { type CppParseResult, type PythonParseResult, type SwiftParseResult, type TsParseResult, mergeCppResults, mergePythonResults, mergeSwiftResults, mergeTsResults, parseCppFile, parsePythonFile, parseSwiftFile, parseTsFile };
|
|
1
|
+
export { C as CppParseResult, P as PythonParseResult, S as SwiftParseResult, T as TsParseResult, f as mergeCppResults, d as mergePythonResults, m as mergeSwiftResults, b as mergeTsResults, e as parseCppFile, c as parsePythonFile, p as parseSwiftFile, a as parseTsFile } from '../cpp-CZUPqJt9.cjs';
|
|
2
|
+
export { P as ParsedSyllabus, a as SyllabusTopic, S as SyllabusUnit, p as parseSyllabus } from '../syllabusParser-MSX1fEzW.cjs';
|