functional-examples 0.0.0-alpha.1
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/README.md +148 -0
- package/dist/cli/commands/generate.d.ts +10 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +64 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/init.d.ts +14 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +95 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/scan.d.ts +20 -0
- package/dist/cli/commands/scan.d.ts.map +1 -0
- package/dist/cli/commands/scan.js +182 -0
- package/dist/cli/commands/scan.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +10 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +65 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/index.d.ts +88 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +43 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/plugin-commands.d.ts +17 -0
- package/dist/cli/plugin-commands.d.ts.map +1 -0
- package/dist/cli/plugin-commands.js +45 -0
- package/dist/cli/plugin-commands.js.map +1 -0
- package/dist/config/index.d.ts +11 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +9 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/index.spec.d.ts +5 -0
- package/dist/config/index.spec.d.ts.map +1 -0
- package/dist/config/index.spec.js +142 -0
- package/dist/config/index.spec.js.map +1 -0
- package/dist/config/loader.d.ts +7 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +85 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/merger.d.ts +27 -0
- package/dist/config/merger.d.ts.map +1 -0
- package/dist/config/merger.js +41 -0
- package/dist/config/merger.js.map +1 -0
- package/dist/config/resolver.d.ts +28 -0
- package/dist/config/resolver.d.ts.map +1 -0
- package/dist/config/resolver.js +165 -0
- package/dist/config/resolver.js.map +1 -0
- package/dist/config/schema.d.ts +53 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +42 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/types.d.ts +17 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +5 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validator.d.ts +6 -0
- package/dist/config/validator.d.ts.map +1 -0
- package/dist/config/validator.js +17 -0
- package/dist/config/validator.js.map +1 -0
- package/dist/extractors/index.d.ts +9 -0
- package/dist/extractors/index.d.ts.map +1 -0
- package/dist/extractors/index.js +9 -0
- package/dist/extractors/index.js.map +1 -0
- package/dist/extractors/loader.d.ts +19 -0
- package/dist/extractors/loader.d.ts.map +1 -0
- package/dist/extractors/loader.js +120 -0
- package/dist/extractors/loader.js.map +1 -0
- package/dist/extractors/meta-yml-fn.d.ts +19 -0
- package/dist/extractors/meta-yml-fn.d.ts.map +1 -0
- package/dist/extractors/meta-yml-fn.js +66 -0
- package/dist/extractors/meta-yml-fn.js.map +1 -0
- package/dist/extractors/meta-yml.d.ts +24 -0
- package/dist/extractors/meta-yml.d.ts.map +1 -0
- package/dist/extractors/meta-yml.js +65 -0
- package/dist/extractors/meta-yml.js.map +1 -0
- package/dist/extractors/registry.d.ts +58 -0
- package/dist/extractors/registry.d.ts.map +1 -0
- package/dist/extractors/registry.js +114 -0
- package/dist/extractors/registry.js.map +1 -0
- package/dist/extractors/registry.spec.d.ts +2 -0
- package/dist/extractors/registry.spec.d.ts.map +1 -0
- package/dist/extractors/registry.spec.js +102 -0
- package/dist/extractors/registry.spec.js.map +1 -0
- package/dist/extractors/types.d.ts +34 -0
- package/dist/extractors/types.d.ts.map +1 -0
- package/dist/extractors/types.js +8 -0
- package/dist/extractors/types.js.map +1 -0
- package/dist/extractors/yaml-frontmatter-fn.d.ts +18 -0
- package/dist/extractors/yaml-frontmatter-fn.d.ts.map +1 -0
- package/dist/extractors/yaml-frontmatter-fn.js +73 -0
- package/dist/extractors/yaml-frontmatter-fn.js.map +1 -0
- package/dist/extractors/yaml-frontmatter.d.ts +22 -0
- package/dist/extractors/yaml-frontmatter.d.ts.map +1 -0
- package/dist/extractors/yaml-frontmatter.js +83 -0
- package/dist/extractors/yaml-frontmatter.js.map +1 -0
- package/dist/extractors/yaml-frontmatter.spec.d.ts +2 -0
- package/dist/extractors/yaml-frontmatter.spec.d.ts.map +1 -0
- package/dist/extractors/yaml-frontmatter.spec.js +134 -0
- package/dist/extractors/yaml-frontmatter.spec.js.map +1 -0
- package/dist/files/index.d.ts +5 -0
- package/dist/files/index.d.ts.map +1 -0
- package/dist/files/index.js +5 -0
- package/dist/files/index.js.map +1 -0
- package/dist/files/reader.d.ts +50 -0
- package/dist/files/reader.d.ts.map +1 -0
- package/dist/files/reader.js +62 -0
- package/dist/files/reader.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/index.d.ts +4 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +4 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/pipeline.d.ts +11 -0
- package/dist/plugins/pipeline.d.ts.map +1 -0
- package/dist/plugins/pipeline.js +24 -0
- package/dist/plugins/pipeline.js.map +1 -0
- package/dist/plugins/registry.d.ts +57 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +93 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/validation.d.ts +64 -0
- package/dist/plugins/validation.d.ts.map +1 -0
- package/dist/plugins/validation.js +55 -0
- package/dist/plugins/validation.js.map +1 -0
- package/dist/regions/index.d.ts +7 -0
- package/dist/regions/index.d.ts.map +1 -0
- package/dist/regions/index.js +6 -0
- package/dist/regions/index.js.map +1 -0
- package/dist/regions/languages.d.ts +15 -0
- package/dist/regions/languages.d.ts.map +1 -0
- package/dist/regions/languages.js +182 -0
- package/dist/regions/languages.js.map +1 -0
- package/dist/regions/parser.d.ts +63 -0
- package/dist/regions/parser.d.ts.map +1 -0
- package/dist/regions/parser.js +175 -0
- package/dist/regions/parser.js.map +1 -0
- package/dist/regions/parser.spec.d.ts +2 -0
- package/dist/regions/parser.spec.d.ts.map +1 -0
- package/dist/regions/parser.spec.js +190 -0
- package/dist/regions/parser.spec.js.map +1 -0
- package/dist/regions/types.d.ts +37 -0
- package/dist/regions/types.d.ts.map +1 -0
- package/dist/regions/types.js +5 -0
- package/dist/regions/types.js.map +1 -0
- package/dist/scanner/candidates.d.ts +24 -0
- package/dist/scanner/candidates.d.ts.map +1 -0
- package/dist/scanner/candidates.js +83 -0
- package/dist/scanner/candidates.js.map +1 -0
- package/dist/scanner/index.d.ts +8 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/index.js +6 -0
- package/dist/scanner/index.js.map +1 -0
- package/dist/scanner/scan.d.ts +40 -0
- package/dist/scanner/scan.d.ts.map +1 -0
- package/dist/scanner/scan.js +44 -0
- package/dist/scanner/scan.js.map +1 -0
- package/dist/scanner/scanner.d.ts +29 -0
- package/dist/scanner/scanner.d.ts.map +1 -0
- package/dist/scanner/scanner.js +296 -0
- package/dist/scanner/scanner.js.map +1 -0
- package/dist/scanner/scanner.spec.d.ts +2 -0
- package/dist/scanner/scanner.spec.d.ts.map +1 -0
- package/dist/scanner/scanner.spec.js +262 -0
- package/dist/scanner/scanner.spec.js.map +1 -0
- package/dist/scanner/types.d.ts +43 -0
- package/dist/scanner/types.d.ts.map +1 -0
- package/dist/scanner/types.js +5 -0
- package/dist/scanner/types.js.map +1 -0
- package/dist/schema/index.d.ts +4 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +4 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/merger.d.ts +35 -0
- package/dist/schema/merger.d.ts.map +1 -0
- package/dist/schema/merger.js +161 -0
- package/dist/schema/merger.js.map +1 -0
- package/dist/schema/typegen.d.ts +13 -0
- package/dist/schema/typegen.d.ts.map +1 -0
- package/dist/schema/typegen.js +125 -0
- package/dist/schema/typegen.js.map +1 -0
- package/dist/schema/validator.d.ts +7 -0
- package/dist/schema/validator.d.ts.map +1 -0
- package/dist/schema/validator.js +32 -0
- package/dist/schema/validator.js.map +1 -0
- package/dist/types/default-map.d.ts +21 -0
- package/dist/types/default-map.d.ts.map +1 -0
- package/dist/types/default-map.js +32 -0
- package/dist/types/default-map.js.map +1 -0
- package/dist/types/extended-iterable.d.ts +197 -0
- package/dist/types/extended-iterable.d.ts.map +1 -0
- package/dist/types/extended-iterable.js +769 -0
- package/dist/types/extended-iterable.js.map +1 -0
- package/dist/types/guards.d.ts +2 -0
- package/dist/types/guards.d.ts.map +1 -0
- package/dist/types/guards.js +2 -0
- package/dist/types/guards.js.map +1 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration resolver - converts config references to actual extractors
|
|
3
|
+
*/
|
|
4
|
+
import { resolve } from 'node:path';
|
|
5
|
+
import { PluginRegistry } from '../plugins/registry.js';
|
|
6
|
+
import { validatePluginOptions } from '../plugins/validation.js';
|
|
7
|
+
import { getDefaultIncludePattern } from '../scanner/candidates.js';
|
|
8
|
+
/**
|
|
9
|
+
* Known extractor packages that can be auto-detected
|
|
10
|
+
*/
|
|
11
|
+
const KNOWN_EXTRACTORS = [
|
|
12
|
+
'@functional-examples/extractor-frontmatter',
|
|
13
|
+
'@functional-examples/yaml-manifest',
|
|
14
|
+
];
|
|
15
|
+
/**
|
|
16
|
+
* Default scan configuration
|
|
17
|
+
*/
|
|
18
|
+
const DEFAULT_SCAN = {
|
|
19
|
+
exclude: ['**/node_modules/**', '**/dist/**', '**/.git/**'],
|
|
20
|
+
root: '.',
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Resolve a configuration to actual extractor instances.
|
|
24
|
+
*
|
|
25
|
+
* If no extractors are specified, attempts to auto-detect installed extractors.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* import { resolveConfig } from 'functional-examples';
|
|
30
|
+
*
|
|
31
|
+
* // Auto-detect extractors
|
|
32
|
+
* const config = await resolveConfig({});
|
|
33
|
+
*
|
|
34
|
+
* // Use with scanExamples
|
|
35
|
+
* const result = await scanExamples({
|
|
36
|
+
* root: './examples',
|
|
37
|
+
* extractors: config.extractors,
|
|
38
|
+
* pathMappings: config.pathMappings,
|
|
39
|
+
* });
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export async function resolveConfig(config) {
|
|
43
|
+
const validationErrors = [];
|
|
44
|
+
// Build plugin registry from config plugins
|
|
45
|
+
const registry = new PluginRegistry();
|
|
46
|
+
const plugins = (config.plugins ?? []);
|
|
47
|
+
for (const plugin of plugins) {
|
|
48
|
+
// Cast to base Plugin type for registry (generics are erased at runtime)
|
|
49
|
+
registry.register(plugin);
|
|
50
|
+
}
|
|
51
|
+
// Run options validation for plugins that have validators and _options
|
|
52
|
+
const optionsValidators = registry.getOptionsValidators();
|
|
53
|
+
if (optionsValidators.length > 0) {
|
|
54
|
+
// Build plugin options map from plugins that expose _options
|
|
55
|
+
const pluginOptions = new Map();
|
|
56
|
+
for (const plugin of plugins) {
|
|
57
|
+
if ('_options' in plugin && plugin._options !== undefined) {
|
|
58
|
+
pluginOptions.set(plugin.name, plugin._options);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const optionsResult = validatePluginOptions({
|
|
62
|
+
validators: optionsValidators,
|
|
63
|
+
pluginOptions,
|
|
64
|
+
});
|
|
65
|
+
if (!optionsResult.success) {
|
|
66
|
+
for (const error of optionsResult.errors) {
|
|
67
|
+
validationErrors.push({
|
|
68
|
+
path: `plugins.${error.pluginName}.${error.path}`,
|
|
69
|
+
message: error.message,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Resolve extractors (legacy path)
|
|
75
|
+
let extractors;
|
|
76
|
+
// Get extractors from plugins
|
|
77
|
+
const pluginExtractors = registry.getExtractors();
|
|
78
|
+
if (pluginExtractors.length > 0) {
|
|
79
|
+
// Prefer plugin extractors
|
|
80
|
+
extractors = pluginExtractors;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
// Auto-detect installed extractors
|
|
84
|
+
extractors = await autoDetectExtractors();
|
|
85
|
+
}
|
|
86
|
+
if (config.scan?.root) {
|
|
87
|
+
config.scan.root = resolve(config.root, config.scan.root);
|
|
88
|
+
}
|
|
89
|
+
// Determine effective include pattern (smart default detection)
|
|
90
|
+
const effectiveInclude = config.scan?.include?.length
|
|
91
|
+
? config.scan.include
|
|
92
|
+
: await getDefaultIncludePattern(config.scan?.root ?? config.root);
|
|
93
|
+
return {
|
|
94
|
+
...config,
|
|
95
|
+
extractors,
|
|
96
|
+
plugins,
|
|
97
|
+
registry,
|
|
98
|
+
pathMappings: config.pathMappings ?? [],
|
|
99
|
+
scan: {
|
|
100
|
+
...DEFAULT_SCAN,
|
|
101
|
+
...config.scan,
|
|
102
|
+
include: effectiveInclude,
|
|
103
|
+
},
|
|
104
|
+
validationErrors,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Auto-detect installed extractor packages
|
|
109
|
+
*/
|
|
110
|
+
async function autoDetectExtractors() {
|
|
111
|
+
const extractors = [];
|
|
112
|
+
for (const packageName of KNOWN_EXTRACTORS) {
|
|
113
|
+
try {
|
|
114
|
+
const extractor = await loadExtractorFromPackage(packageName);
|
|
115
|
+
if (extractor) {
|
|
116
|
+
extractors.push(extractor);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// Package not installed, skip silently
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return extractors;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Load extractor from package name
|
|
127
|
+
*/
|
|
128
|
+
async function loadExtractorFromPackage(packageName, options) {
|
|
129
|
+
try {
|
|
130
|
+
const module = await import(packageName);
|
|
131
|
+
// Try common export patterns
|
|
132
|
+
const factory = module.createFrontmatterExtractor ??
|
|
133
|
+
module.createYamlManifestExtractor ??
|
|
134
|
+
module.createMetaYmlExtractor ??
|
|
135
|
+
module.createExtractor ??
|
|
136
|
+
module.default?.createExtractor ??
|
|
137
|
+
module.default;
|
|
138
|
+
if (typeof factory === 'function') {
|
|
139
|
+
return factory(options);
|
|
140
|
+
}
|
|
141
|
+
// Module might export extractor directly
|
|
142
|
+
if (isExtractorInstance(module.default)) {
|
|
143
|
+
return module.default;
|
|
144
|
+
}
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Load extractor from config object
|
|
153
|
+
*/
|
|
154
|
+
/**
|
|
155
|
+
* Check if value is an extractor instance
|
|
156
|
+
*/
|
|
157
|
+
function isExtractorInstance(value) {
|
|
158
|
+
return (typeof value === 'object' &&
|
|
159
|
+
value !== null &&
|
|
160
|
+
'name' in value &&
|
|
161
|
+
'extract' in value &&
|
|
162
|
+
typeof value.name === 'string' &&
|
|
163
|
+
typeof value.extract === 'function');
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/config/resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration types with Zod schemas for runtime validation
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import type { ExtractorReference } from './types.js';
|
|
6
|
+
export declare const ExtractorConfigSchema: z.ZodObject<{
|
|
7
|
+
name: z.ZodString;
|
|
8
|
+
module: z.ZodString;
|
|
9
|
+
options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
10
|
+
}, z.core.$strip>;
|
|
11
|
+
export declare const ExtractorInstanceSchema: z.ZodObject<{
|
|
12
|
+
name: z.ZodString;
|
|
13
|
+
extract: z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>;
|
|
14
|
+
}, z.core.$strip>;
|
|
15
|
+
export declare const ExtractorReferenceSchema: z.ZodType<ExtractorReference>;
|
|
16
|
+
export declare const ExtractorOrReferenceSchema: z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
17
|
+
name: z.ZodString;
|
|
18
|
+
module: z.ZodString;
|
|
19
|
+
options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
20
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
21
|
+
name: z.ZodString;
|
|
22
|
+
extract: z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>;
|
|
23
|
+
}, z.core.$strip>]>;
|
|
24
|
+
export declare const ScanConfigSchema: z.ZodObject<{
|
|
25
|
+
include: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
26
|
+
exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
27
|
+
root: z.ZodOptional<z.ZodString>;
|
|
28
|
+
recursive: z.ZodOptional<z.ZodBoolean>;
|
|
29
|
+
fileExtensions: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
export declare const ConfigSchema: () => z.ZodObject<{
|
|
32
|
+
extractors: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
33
|
+
name: z.ZodString;
|
|
34
|
+
module: z.ZodString;
|
|
35
|
+
options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
36
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
37
|
+
name: z.ZodString;
|
|
38
|
+
extract: z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>;
|
|
39
|
+
}, z.core.$strip>]>>>;
|
|
40
|
+
scan: z.ZodOptional<z.ZodObject<{
|
|
41
|
+
include: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
42
|
+
exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
43
|
+
root: z.ZodOptional<z.ZodString>;
|
|
44
|
+
recursive: z.ZodOptional<z.ZodBoolean>;
|
|
45
|
+
fileExtensions: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
46
|
+
}, z.core.$strip>>;
|
|
47
|
+
pathMappings: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
48
|
+
pattern: z.ZodString;
|
|
49
|
+
extractor: z.ZodString;
|
|
50
|
+
}, z.core.$strip>>>;
|
|
51
|
+
}, z.core.$strip>;
|
|
52
|
+
export type ConfigSchemaType = z.infer<ReturnType<typeof ConfigSchema>>;
|
|
53
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,eAAO,MAAM,qBAAqB;;;;iBAIhC,CAAC;AAGH,eAAO,MAAM,uBAAuB;;;iBAGlC,CAAC;AAEH,eAAO,MAAM,wBAAwB,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAGjE,CAAC;AAGH,eAAO,MAAM,0BAA0B;;;;;;;mBAIrC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;iBAM3B,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;iBAYrB,CAAC;AAEL,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration types with Zod schemas for runtime validation
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
export const ExtractorConfigSchema = z.object({
|
|
6
|
+
name: z.string().min(1),
|
|
7
|
+
module: z.string().min(1),
|
|
8
|
+
options: z.record(z.string(), z.unknown()).optional(),
|
|
9
|
+
});
|
|
10
|
+
// Schema for extractor instance (already created)
|
|
11
|
+
export const ExtractorInstanceSchema = z.object({
|
|
12
|
+
name: z.string().min(1),
|
|
13
|
+
extract: z.function(),
|
|
14
|
+
});
|
|
15
|
+
export const ExtractorReferenceSchema = z.union([
|
|
16
|
+
z.string().min(1),
|
|
17
|
+
ExtractorConfigSchema,
|
|
18
|
+
]);
|
|
19
|
+
// Schema that accepts both references and instances
|
|
20
|
+
export const ExtractorOrReferenceSchema = z.union([
|
|
21
|
+
z.string().min(1),
|
|
22
|
+
ExtractorConfigSchema,
|
|
23
|
+
ExtractorInstanceSchema,
|
|
24
|
+
]);
|
|
25
|
+
export const ScanConfigSchema = z.object({
|
|
26
|
+
include: z.array(z.string().min(1)).optional(),
|
|
27
|
+
exclude: z.array(z.string().min(1)).optional(),
|
|
28
|
+
root: z.string().optional(),
|
|
29
|
+
recursive: z.boolean().optional(),
|
|
30
|
+
fileExtensions: z.array(z.string().min(1)).optional(),
|
|
31
|
+
});
|
|
32
|
+
export const ConfigSchema = () => z.object({
|
|
33
|
+
extractors: z.array(ExtractorOrReferenceSchema).optional(),
|
|
34
|
+
scan: ScanConfigSchema.optional(),
|
|
35
|
+
pathMappings: z
|
|
36
|
+
.array(z.object({
|
|
37
|
+
pattern: z.string().min(1),
|
|
38
|
+
extractor: z.string().min(1),
|
|
39
|
+
}))
|
|
40
|
+
.optional(),
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACtD,CAAC,CAAC;AAEH,kDAAkD;AAClD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACtB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAkC,CAAC,CAAC,KAAK,CAAC;IAC7E,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjB,qBAAqB;CACtB,CAAC,CAAC;AAEH,oDAAoD;AACpD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC;IAChD,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjB,qBAAqB;IACrB,uBAAuB;CACxB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC9C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACjC,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACtD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE,CAC/B,CAAC,CAAC,MAAM,CAAC;IACP,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,QAAQ,EAAE;IAC1D,IAAI,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IACjC,YAAY,EAAE,CAAC;SACZ,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KAC7B,CAAC,CACH;SACA,QAAQ,EAAE;CACd,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration types - re-exported from devkit for backwards compatibility
|
|
3
|
+
*/
|
|
4
|
+
import type { BaseMetadata } from '@functional-examples/devkit';
|
|
5
|
+
export type { BaseMetadata, Config, ConfigWithRoot, Extractor, ExtractorConfig, ExtractorConfigOrFunction, ExtractorReference, GenerateConfig, JSONSchemaObject, PathMapping, Plugin, ScanConfig, } from '@functional-examples/devkit';
|
|
6
|
+
/**
|
|
7
|
+
* @deprecated Use Extractor from @functional-examples/devkit
|
|
8
|
+
*/
|
|
9
|
+
export interface MetadataExtractorFunction<TMetadata extends BaseMetadata = BaseMetadata> {
|
|
10
|
+
(context: unknown, options?: Record<string, unknown>): Promise<{
|
|
11
|
+
metadata: TMetadata;
|
|
12
|
+
files: unknown[];
|
|
13
|
+
}>;
|
|
14
|
+
name?: string;
|
|
15
|
+
canExtract?: (context: unknown) => boolean | Promise<boolean>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,YAAY,EACV,YAAY,EACZ,MAAM,EACN,cAAc,EACd,SAAS,EACT,eAAe,EACf,yBAAyB,EACzB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,MAAM,EACN,UAAU,GACX,MAAM,6BAA6B,CAAC;AAErC;;GAEG;AACH,MAAM,WAAW,yBAAyB,CACxC,SAAS,SAAS,YAAY,GAAG,YAAY;IAE7C,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;QAC7D,QAAQ,EAAE,SAAS,CAAC;QACpB,KAAK,EAAE,OAAO,EAAE,CAAC;KAClB,CAAC,CAAC;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/config/validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAG/D,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,qBAAqB,EAAE,CAevE"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration validation using Zod
|
|
3
|
+
*/
|
|
4
|
+
import { ConfigSchema } from './schema.js';
|
|
5
|
+
export function validateConfig(config) {
|
|
6
|
+
const schema = ConfigSchema();
|
|
7
|
+
const result = schema.safeParse(config);
|
|
8
|
+
if (result.success) {
|
|
9
|
+
return [];
|
|
10
|
+
}
|
|
11
|
+
return result.error.issues.map((issue) => ({
|
|
12
|
+
path: issue.path.join('.'),
|
|
13
|
+
message: issue.message,
|
|
14
|
+
location: issue.code,
|
|
15
|
+
}));
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/config/validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,UAAU,cAAc,CAAC,MAAe;IAC5C,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAExC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAC5B,CAAC,KAAK,EAAyB,EAAE,CAAC,CAAC;QACjC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,KAAK,CAAC,IAAI;KACrB,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extractor module - types for building extractors
|
|
3
|
+
*
|
|
4
|
+
* Note: Actual extractor implementations have moved to separate packages:
|
|
5
|
+
* - @functional-examples/extractor-frontmatter
|
|
6
|
+
* - @functional-examples/yaml-manifest
|
|
7
|
+
*/
|
|
8
|
+
export type { ExtractionContext, ExtractedMetadata } from './types.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extractors/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extractor module - types for building extractors
|
|
3
|
+
*
|
|
4
|
+
* Note: Actual extractor implementations have moved to separate packages:
|
|
5
|
+
* - @functional-examples/extractor-frontmatter
|
|
6
|
+
* - @functional-examples/yaml-manifest
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extractors/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy extractor module loading with caching
|
|
3
|
+
*/
|
|
4
|
+
import type { BaseMetadata } from '../types/index.js';
|
|
5
|
+
import type { MetadataExtractorFunction } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Resolve a module reference to a loaded extractor
|
|
8
|
+
* @param ref - Package name, local path, or ExtractorConfig
|
|
9
|
+
* @param basePath - Base directory for resolving local paths
|
|
10
|
+
* @returns Loaded extractor or throws if module cannot be loaded
|
|
11
|
+
*/
|
|
12
|
+
export declare function loadExtractor(ref: string | {
|
|
13
|
+
module: string;
|
|
14
|
+
}, basePath?: string): Promise<MetadataExtractorFunction<BaseMetadata>>;
|
|
15
|
+
/**
|
|
16
|
+
* Clear the module cache (useful for testing or config reload)
|
|
17
|
+
*/
|
|
18
|
+
export declare function clearCache(): void;
|
|
19
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/extractors/loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAM5D;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAChC,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC,CAmBlD;AAsHD;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAEjC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy extractor module loading with caching
|
|
3
|
+
*/
|
|
4
|
+
import { pathToFileURL } from 'node:url';
|
|
5
|
+
import * as path from 'node:path';
|
|
6
|
+
const cache = new Map();
|
|
7
|
+
/**
|
|
8
|
+
* Resolve a module reference to a loaded extractor
|
|
9
|
+
* @param ref - Package name, local path, or ExtractorConfig
|
|
10
|
+
* @param basePath - Base directory for resolving local paths
|
|
11
|
+
* @returns Loaded extractor or throws if module cannot be loaded
|
|
12
|
+
*/
|
|
13
|
+
export async function loadExtractor(ref, basePath) {
|
|
14
|
+
const modulePath = typeof ref === 'string' ? ref : ref.module;
|
|
15
|
+
const cached = cache.get(modulePath);
|
|
16
|
+
if (cached) {
|
|
17
|
+
return cached;
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
const extractor = await loadModule(modulePath, basePath);
|
|
21
|
+
cache.set(modulePath, extractor);
|
|
22
|
+
return extractor;
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
throw new Error(`Failed to load extractor module "${modulePath}": ${error instanceof Error ? error.message : String(error)}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Load a module from various formats (ESM, CJS, package)
|
|
30
|
+
* @param modulePath - Module identifier
|
|
31
|
+
* @param basePath - Base directory for resolving local paths
|
|
32
|
+
* @returns Loaded extractor function
|
|
33
|
+
*/
|
|
34
|
+
async function loadModule(modulePath, basePath) {
|
|
35
|
+
let resolvedPath = modulePath;
|
|
36
|
+
if (modulePath.startsWith('./') || modulePath.startsWith('../')) {
|
|
37
|
+
if (!basePath) {
|
|
38
|
+
throw new Error(`Local path "${modulePath}" requires basePath to be provided`);
|
|
39
|
+
}
|
|
40
|
+
resolvedPath = path.resolve(basePath, modulePath);
|
|
41
|
+
}
|
|
42
|
+
else if (modulePath.startsWith('/') || isAbsolutePath(modulePath)) {
|
|
43
|
+
resolvedPath = modulePath;
|
|
44
|
+
}
|
|
45
|
+
const ext = path.extname(resolvedPath).toLowerCase();
|
|
46
|
+
const isTypeScript = ext === '.ts' || ext === '.mts' || ext === '.cts';
|
|
47
|
+
const isJavaScript = ext === '.js' || ext === '.mjs' || ext === '.cjs';
|
|
48
|
+
if (isTypeScript) {
|
|
49
|
+
return await loadTypeScriptModule(resolvedPath);
|
|
50
|
+
}
|
|
51
|
+
else if (isJavaScript) {
|
|
52
|
+
return await loadJavaScriptModule(resolvedPath);
|
|
53
|
+
}
|
|
54
|
+
return await loadPackageModule(modulePath);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Check if a path is absolute (not starting with /)
|
|
58
|
+
*/
|
|
59
|
+
function isAbsolutePath(p) {
|
|
60
|
+
return path.isAbsolute(p);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Load a TypeScript module using tsx
|
|
64
|
+
*/
|
|
65
|
+
async function loadTypeScriptModule(filePath) {
|
|
66
|
+
const tsx = await import('tsx');
|
|
67
|
+
const module = await tsx.import(filePath);
|
|
68
|
+
return normalizeModuleExport(module, filePath);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Load a JavaScript module (ESM or CJS)
|
|
72
|
+
*/
|
|
73
|
+
async function loadJavaScriptModule(filePath) {
|
|
74
|
+
const fileUrl = pathToFileURL(filePath).href;
|
|
75
|
+
const module = await import(fileUrl);
|
|
76
|
+
return normalizeModuleExport(module, filePath);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Load a package from node_modules
|
|
80
|
+
*/
|
|
81
|
+
async function loadPackageModule(packageName) {
|
|
82
|
+
try {
|
|
83
|
+
const module = await import(packageName);
|
|
84
|
+
return normalizeModuleExport(module, packageName);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
throw new Error(`Package "${packageName}" not found. Make sure it is installed.`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Normalize module export to extractor function
|
|
92
|
+
* Handles default exports, named exports, and object exports with extractor property
|
|
93
|
+
*/
|
|
94
|
+
function normalizeModuleExport(module, modulePath) {
|
|
95
|
+
if (typeof module === 'function') {
|
|
96
|
+
return module;
|
|
97
|
+
}
|
|
98
|
+
if (module && typeof module === 'object') {
|
|
99
|
+
const obj = module;
|
|
100
|
+
if (typeof obj.extractor === 'function') {
|
|
101
|
+
return obj.extractor;
|
|
102
|
+
}
|
|
103
|
+
if (typeof obj.default === 'function') {
|
|
104
|
+
return obj.default;
|
|
105
|
+
}
|
|
106
|
+
for (const value of Object.values(obj)) {
|
|
107
|
+
if (typeof value === 'function') {
|
|
108
|
+
return value;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
throw new Error(`Invalid module export from "${modulePath}". Expected a function export or object with extractor property.`);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Clear the module cache (useful for testing or config reload)
|
|
116
|
+
*/
|
|
117
|
+
export function clearCache() {
|
|
118
|
+
cache.clear();
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/extractors/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* meta.yml extractor for directory-based examples (function-based).
|
|
3
|
+
*
|
|
4
|
+
* Expected structure:
|
|
5
|
+
* ```
|
|
6
|
+
* examples/
|
|
7
|
+
* my-example/
|
|
8
|
+
* meta.yml
|
|
9
|
+
* main.ts
|
|
10
|
+
* helper.ts
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
import type { MetadataExtractorFunction } from './types.js';
|
|
14
|
+
import type { BaseMetadata } from '../types/index.js';
|
|
15
|
+
/**
|
|
16
|
+
* Extractor for directory-based examples with meta.yml.
|
|
17
|
+
*/
|
|
18
|
+
export declare function createMetaYmlExtractor<TMetadata extends BaseMetadata = BaseMetadata>(): MetadataExtractorFunction<TMetadata>;
|
|
19
|
+
//# sourceMappingURL=meta-yml-fn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-yml-fn.d.ts","sourceRoot":"","sources":["../../src/extractors/meta-yml-fn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,mBAAmB,CAAC;AAEnE;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,SAAS,YAAY,GAAG,YAAY,KAC1C,yBAAyB,CAAC,SAAS,CAAC,CAiExC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* meta.yml extractor for directory-based examples (function-based).
|
|
3
|
+
*
|
|
4
|
+
* Expected structure:
|
|
5
|
+
* ```
|
|
6
|
+
* examples/
|
|
7
|
+
* my-example/
|
|
8
|
+
* meta.yml
|
|
9
|
+
* main.ts
|
|
10
|
+
* helper.ts
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
import YAML from 'yaml';
|
|
14
|
+
import fs from 'node:fs/promises';
|
|
15
|
+
import path from 'node:path';
|
|
16
|
+
/**
|
|
17
|
+
* Extractor for directory-based examples with meta.yml.
|
|
18
|
+
*/
|
|
19
|
+
export function createMetaYmlExtractor() {
|
|
20
|
+
const extractor = async (context) => {
|
|
21
|
+
if (!context.isDirectory ||
|
|
22
|
+
!(context.entries?.includes('meta.yml') ?? false)) {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
const metaPath = path.join(context.path, 'meta.yml');
|
|
26
|
+
const metaContent = await fs.readFile(metaPath, 'utf-8');
|
|
27
|
+
const parsed = YAML.parse(metaContent);
|
|
28
|
+
const dirName = path.basename(context.path);
|
|
29
|
+
const metadata = {
|
|
30
|
+
id: dirName,
|
|
31
|
+
title: dirName,
|
|
32
|
+
...parsed,
|
|
33
|
+
};
|
|
34
|
+
const contentFileName = parsed.contentFile ?? 'content.md';
|
|
35
|
+
const excludedFiles = new Set(['meta.yml', contentFileName]);
|
|
36
|
+
const files = [];
|
|
37
|
+
await collectFiles(context.path, context.path, excludedFiles, files);
|
|
38
|
+
return {
|
|
39
|
+
metadata,
|
|
40
|
+
files,
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
async function collectFiles(rootPath, currentPath, excludedFiles, collected) {
|
|
44
|
+
const entries = await fs.readdir(currentPath, { withFileTypes: true });
|
|
45
|
+
for (const entry of entries) {
|
|
46
|
+
const fullPath = path.join(currentPath, entry.name);
|
|
47
|
+
const relativePath = path.relative(rootPath, fullPath);
|
|
48
|
+
if (entry.isDirectory()) {
|
|
49
|
+
await collectFiles(rootPath, fullPath, excludedFiles, collected);
|
|
50
|
+
}
|
|
51
|
+
else if (!excludedFiles.has(entry.name)) {
|
|
52
|
+
const contents = await fs.readFile(fullPath, 'utf-8');
|
|
53
|
+
collected.push({
|
|
54
|
+
path: relativePath,
|
|
55
|
+
contents,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
extractor.name = 'meta-yml';
|
|
61
|
+
extractor.canExtract = (context) => {
|
|
62
|
+
return (context.isDirectory && (context.entries?.includes('meta.yml') ?? false));
|
|
63
|
+
};
|
|
64
|
+
return extractor;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=meta-yml-fn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-yml-fn.js","sourceRoot":"","sources":["../../src/extractors/meta-yml-fn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B;;GAEG;AACH,MAAM,UAAU,sBAAsB;IAGpC,MAAM,SAAS,GAAyC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxE,IACE,CAAC,OAAO,CAAC,WAAW;YACpB,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,EACjD,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAA4B,CAAC;QAElE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG;YACf,EAAE,EAAE,OAAO;YACX,KAAK,EAAE,OAAO;YACd,GAAG,MAAM;SACG,CAAC;QAEf,MAAM,eAAe,GAClB,MAAmC,CAAC,WAAW,IAAI,YAAY,CAAC;QACnE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC;QAE7D,MAAM,KAAK,GAAkB,EAAE,CAAC;QAChC,MAAM,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;QAErE,OAAO;YACL,QAAQ;YACR,KAAK;SACN,CAAC;IACJ,CAAC,CAAC;IAEF,KAAK,UAAU,YAAY,CACzB,QAAgB,EAChB,WAAmB,EACnB,aAA0B,EAC1B,SAAwB;QAExB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACpD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAEvD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;YACnE,CAAC;iBAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1C,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACtD,SAAS,CAAC,IAAI,CAAC;oBACb,IAAI,EAAE,YAAY;oBAClB,QAAQ;iBACT,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS,CAAC,IAAI,GAAG,UAAU,CAAC;IAC5B,SAAS,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,EAAE;QACjC,OAAO,CACL,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,CACxE,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* meta.yml extractor for directory-based examples.
|
|
3
|
+
*
|
|
4
|
+
* Expected structure:
|
|
5
|
+
* ```
|
|
6
|
+
* examples/
|
|
7
|
+
* my-example/
|
|
8
|
+
* meta.yml
|
|
9
|
+
* main.ts
|
|
10
|
+
* helper.ts
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
import type { MetadataExtractor, ExtractionContext, ExtractedMetadata } from './types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Extractor for directory-based examples with meta.yml.
|
|
16
|
+
* Used by isolated-workers pattern.
|
|
17
|
+
*/
|
|
18
|
+
export declare class MetaYmlExtractor implements MetadataExtractor {
|
|
19
|
+
readonly name = "meta-yml";
|
|
20
|
+
canExtract(context: ExtractionContext): boolean;
|
|
21
|
+
extract(context: ExtractionContext): Promise<ExtractedMetadata>;
|
|
22
|
+
private collectFiles;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=meta-yml.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-yml.d.ts","sourceRoot":"","sources":["../../src/extractors/meta-yml.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG1F;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,iBAAiB;IACxD,QAAQ,CAAC,IAAI,cAAc;IAE3B,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO;IAKzC,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;YA0BvD,YAAY;CAuB3B"}
|