@farris/cli 2.1.2 → 2.1.3

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.
Files changed (63) hide show
  1. package/lib/commands/build-components.js +39 -39
  2. package/lib/commands/build-components.js.map +1 -1
  3. package/lib/commands/build-css.js +38 -38
  4. package/lib/commands/build-css.js.map +1 -1
  5. package/lib/commands/build-lib.js +25 -25
  6. package/lib/commands/build.js +14 -14
  7. package/lib/commands/build.js.map +1 -1
  8. package/lib/commands/create-app.js +54 -54
  9. package/lib/commands/dev-serve.js +18 -18
  10. package/lib/commands/extract-i18n.js +74 -74
  11. package/lib/commands/extract-i18n.js.map +1 -1
  12. package/lib/commands/generate/api.js +124 -124
  13. package/lib/commands/generate/api.js.map +1 -1
  14. package/lib/commands/generate/common.js +100 -100
  15. package/lib/commands/generate/common.js.map +1 -1
  16. package/lib/commands/generate/component.js +156 -156
  17. package/lib/commands/generate/component.js.map +1 -1
  18. package/lib/commands/generate/view.js +165 -165
  19. package/lib/commands/generate/view.js.map +1 -1
  20. package/lib/commands/preview-serve.js +16 -16
  21. package/lib/commands/workspace/add-app.js +180 -180
  22. package/lib/commands/workspace/add-app.js.map +1 -1
  23. package/lib/commands/workspace/create.js +379 -379
  24. package/lib/commands/workspace/create.js.map +1 -1
  25. package/lib/commands/workspace/inspect.js +30 -30
  26. package/lib/commands/workspace/inspect.js.map +1 -1
  27. package/lib/commands/workspace/verify.js +38 -38
  28. package/lib/commands/workspace/verify.js.map +1 -1
  29. package/lib/common/constant.js +64 -63
  30. package/lib/common/constant.js.map +1 -1
  31. package/lib/common/generate-app.js +44 -44
  32. package/lib/common/get-dependencies.js +9 -9
  33. package/lib/common/get-farris-config.js +11 -11
  34. package/lib/common/get-farris-config.js.map +1 -1
  35. package/lib/common/get-version.js +6 -6
  36. package/lib/common/get-vite-config.js +105 -105
  37. package/lib/common/get-vite-config.js.map +1 -1
  38. package/lib/common/output.js +94 -94
  39. package/lib/common/output.js.map +1 -1
  40. package/lib/common/safety.js +171 -171
  41. package/lib/common/safety.js.map +1 -1
  42. package/lib/common/template-renderer.js +114 -114
  43. package/lib/common/template-renderer.js.map +1 -1
  44. package/lib/common/transaction.js +83 -83
  45. package/lib/common/transaction.js.map +1 -1
  46. package/lib/common/verifier.js +146 -146
  47. package/lib/common/verifier.js.map +1 -1
  48. package/lib/config/vite-app.js +13 -13
  49. package/lib/config/vite-common.js +20 -20
  50. package/lib/config/vite-common.js.map +1 -1
  51. package/lib/config/vite-component.js +30 -30
  52. package/lib/config/vite-component.js.map +1 -1
  53. package/lib/config/vite-lib.js +26 -26
  54. package/lib/index.js +175 -175
  55. package/lib/plugins/create-component-style.js +44 -44
  56. package/lib/plugins/create-package-json.js +33 -33
  57. package/lib/plugins/create-package-json.js.map +1 -1
  58. package/lib/plugins/dts.js +8 -8
  59. package/lib/plugins/html-system.js +9 -9
  60. package/lib/plugins/replace.js +17 -17
  61. package/lib/plugins/systemjs-bundle.js +15 -15
  62. package/lib/plugins/systemjs-bundle.js.map +1 -1
  63. package/package.json +1 -1
@@ -1,172 +1,172 @@
1
- import { existsSync, lstatSync, readdirSync } from 'node:fs';
2
- import { resolve } from 'node:path';
3
- import { WorkspaceStatus } from './constant.js';
4
- // 已知 AI 配置与项目元数据文件/目录(忽略列表)
5
- export const KNOWN_AI_AND_META_ENTRIES = new Set([
6
- '.git',
7
- '.gitignore',
8
- '.agent',
9
- '.agents',
10
- '.cursor',
11
- '.vscode',
12
- '.superpowers',
13
- '.changeset',
14
- '.github',
15
- '.codebuddy',
16
- '.trae',
17
- 'agents.md',
18
- 'claude.md',
19
- 'gemini.md',
20
- '.windsurfrules',
21
- '.cursorrules'
22
- ]);
23
- // 工程证据关键文件
24
- export const PROJECT_EVIDENCE_FILES = [
25
- 'package.json',
26
- 'pnpm-workspace.yaml',
27
- 'vite.config.ts',
28
- 'vite.config.js',
29
- 'vite.config.mjs',
30
- 'farris.config.ts',
31
- 'farris.config.js',
32
- 'farris.config.mjs',
33
- 'tsconfig.json',
34
- 'src',
35
- 'packages',
36
- 'node_modules'
37
- ];
38
- /**
39
- * 校验目标路径安全性,防止目录穿越与非法路径
40
- */
41
- export function validateTargetPath(target) {
42
- if (!target || typeof target !== 'string') {
43
- return { valid: false, resolved: '', error: '目标路径不能为空' };
44
- }
45
- const resolved = resolve(process.cwd(), target);
46
- // 检查是否在非法系统根或包含非法控制字符
47
- if (resolved.includes('\0')) {
48
- return { valid: false, resolved: '', error: '目标路径包含非法字符' };
49
- }
50
- return { valid: true, resolved };
51
- }
52
- /**
53
- * 扫描目标目录状态
54
- */
55
- export function inspectTarget(targetPath) {
56
- const pathValidation = validateTargetPath(targetPath);
57
- if (!pathValidation.valid) {
58
- return {
59
- status: WorkspaceStatus.INVALID_TARGET,
60
- canCreate: false,
61
- target: targetPath,
62
- exists: false,
63
- conflicts: [],
64
- preservedInputEntries: [],
65
- message: pathValidation.error
66
- };
67
- }
68
- const resolvedTarget = pathValidation.resolved;
69
- if (!existsSync(resolvedTarget)) {
70
- return {
71
- status: WorkspaceStatus.MISSING,
72
- canCreate: true,
73
- target: resolvedTarget,
74
- exists: false,
75
- conflicts: [],
76
- preservedInputEntries: []
77
- };
78
- }
79
- const stat = lstatSync(resolvedTarget);
80
- if (!stat.isDirectory()) {
81
- return {
82
- status: WorkspaceStatus.INVALID_TARGET,
83
- canCreate: false,
84
- target: resolvedTarget,
85
- exists: true,
86
- conflicts: [resolvedTarget],
87
- preservedInputEntries: [],
88
- message: '目标路径存在但不是目录'
89
- };
90
- }
91
- const entries = readdirSync(resolvedTarget);
92
- if (entries.length === 0) {
93
- return {
94
- status: WorkspaceStatus.EMPTY,
95
- canCreate: true,
96
- target: resolvedTarget,
97
- exists: true,
98
- conflicts: [],
99
- preservedInputEntries: []
100
- };
101
- }
102
- // 检查是否是现有 workspace
103
- const hasWorkspaceYaml = entries.includes('pnpm-workspace.yaml');
104
- const hasPackageJson = entries.includes('package.json');
105
- const hasPackagesDir = entries.includes('packages');
106
- if (hasWorkspaceYaml) {
107
- return {
108
- status: WorkspaceStatus.EXISTING_WORKSPACE,
109
- canCreate: false,
110
- target: resolvedTarget,
111
- exists: true,
112
- conflicts: ['pnpm-workspace.yaml'],
113
- preservedInputEntries: []
114
- };
115
- }
116
- // 检查是否包含已有工程特征
117
- const projectConflicts = entries.filter((e) => PROJECT_EVIDENCE_FILES.includes(e));
118
- if (projectConflicts.length > 0) {
119
- return {
120
- status: WorkspaceStatus.EXISTING_OR_UNKNOWN_PROJECT,
121
- canCreate: false,
122
- target: resolvedTarget,
123
- exists: true,
124
- conflicts: projectConflicts,
125
- preservedInputEntries: []
126
- };
127
- }
128
- // 分析是否全是 AI 配置或受保护输入
129
- let hasAiOnly = true;
130
- const preservedInputs = [];
131
- for (const entry of entries) {
132
- const lower = entry.toLowerCase();
133
- if (KNOWN_AI_AND_META_ENTRIES.has(lower)) {
134
- continue;
135
- }
136
- hasAiOnly = false;
137
- // 属于非冲突的用户保留文件(如 docs, prd.md, design.md 等)
138
- preservedInputs.push(entry);
139
- }
140
- if (hasAiOnly) {
141
- return {
142
- status: WorkspaceStatus.AI_CONFIG_ONLY,
143
- canCreate: true,
144
- target: resolvedTarget,
145
- exists: true,
146
- conflicts: [],
147
- preservedInputEntries: []
148
- };
149
- }
150
- return {
151
- status: WorkspaceStatus.PRESERVED_INPUT_ONLY,
152
- canCreate: true,
153
- target: resolvedTarget,
154
- exists: true,
155
- conflicts: [],
156
- preservedInputEntries: preservedInputs
157
- };
158
- }
159
- /**
160
- * 预检计划写入的文件与已有文件是否存在冲突
161
- */
162
- export function checkPlannedConflicts(targetDir, plannedRelativeFiles) {
163
- const conflicts = [];
164
- for (const relFile of plannedRelativeFiles) {
165
- const fullPath = resolve(targetDir, relFile);
166
- if (existsSync(fullPath)) {
167
- conflicts.push(relFile);
168
- }
169
- }
170
- return conflicts;
171
- }
1
+ import { existsSync, lstatSync, readdirSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import { WorkspaceStatus } from './constant.js';
4
+ // 已知 AI 配置与项目元数据文件/目录(忽略列表)
5
+ export const KNOWN_AI_AND_META_ENTRIES = new Set([
6
+ '.git',
7
+ '.gitignore',
8
+ '.agent',
9
+ '.agents',
10
+ '.cursor',
11
+ '.vscode',
12
+ '.superpowers',
13
+ '.changeset',
14
+ '.github',
15
+ '.codebuddy',
16
+ '.trae',
17
+ 'agents.md',
18
+ 'claude.md',
19
+ 'gemini.md',
20
+ '.windsurfrules',
21
+ '.cursorrules'
22
+ ]);
23
+ // 工程证据关键文件
24
+ export const PROJECT_EVIDENCE_FILES = [
25
+ 'package.json',
26
+ 'pnpm-workspace.yaml',
27
+ 'vite.config.ts',
28
+ 'vite.config.js',
29
+ 'vite.config.mjs',
30
+ 'farris.config.ts',
31
+ 'farris.config.js',
32
+ 'farris.config.mjs',
33
+ 'tsconfig.json',
34
+ 'src',
35
+ 'packages',
36
+ 'node_modules'
37
+ ];
38
+ /**
39
+ * 校验目标路径安全性,防止目录穿越与非法路径
40
+ */
41
+ export function validateTargetPath(target) {
42
+ if (!target || typeof target !== 'string') {
43
+ return { valid: false, resolved: '', error: '目标路径不能为空' };
44
+ }
45
+ const resolved = resolve(process.cwd(), target);
46
+ // 检查是否在非法系统根或包含非法控制字符
47
+ if (resolved.includes('\0')) {
48
+ return { valid: false, resolved: '', error: '目标路径包含非法字符' };
49
+ }
50
+ return { valid: true, resolved };
51
+ }
52
+ /**
53
+ * 扫描目标目录状态
54
+ */
55
+ export function inspectTarget(targetPath) {
56
+ const pathValidation = validateTargetPath(targetPath);
57
+ if (!pathValidation.valid) {
58
+ return {
59
+ status: WorkspaceStatus.INVALID_TARGET,
60
+ canCreate: false,
61
+ target: targetPath,
62
+ exists: false,
63
+ conflicts: [],
64
+ preservedInputEntries: [],
65
+ message: pathValidation.error
66
+ };
67
+ }
68
+ const resolvedTarget = pathValidation.resolved;
69
+ if (!existsSync(resolvedTarget)) {
70
+ return {
71
+ status: WorkspaceStatus.MISSING,
72
+ canCreate: true,
73
+ target: resolvedTarget,
74
+ exists: false,
75
+ conflicts: [],
76
+ preservedInputEntries: []
77
+ };
78
+ }
79
+ const stat = lstatSync(resolvedTarget);
80
+ if (!stat.isDirectory()) {
81
+ return {
82
+ status: WorkspaceStatus.INVALID_TARGET,
83
+ canCreate: false,
84
+ target: resolvedTarget,
85
+ exists: true,
86
+ conflicts: [resolvedTarget],
87
+ preservedInputEntries: [],
88
+ message: '目标路径存在但不是目录'
89
+ };
90
+ }
91
+ const entries = readdirSync(resolvedTarget);
92
+ if (entries.length === 0) {
93
+ return {
94
+ status: WorkspaceStatus.EMPTY,
95
+ canCreate: true,
96
+ target: resolvedTarget,
97
+ exists: true,
98
+ conflicts: [],
99
+ preservedInputEntries: []
100
+ };
101
+ }
102
+ // 检查是否是现有 workspace
103
+ const hasWorkspaceYaml = entries.includes('pnpm-workspace.yaml');
104
+ const hasPackageJson = entries.includes('package.json');
105
+ const hasPackagesDir = entries.includes('packages');
106
+ if (hasWorkspaceYaml) {
107
+ return {
108
+ status: WorkspaceStatus.EXISTING_WORKSPACE,
109
+ canCreate: false,
110
+ target: resolvedTarget,
111
+ exists: true,
112
+ conflicts: ['pnpm-workspace.yaml'],
113
+ preservedInputEntries: []
114
+ };
115
+ }
116
+ // 检查是否包含已有工程特征
117
+ const projectConflicts = entries.filter((e) => PROJECT_EVIDENCE_FILES.includes(e));
118
+ if (projectConflicts.length > 0) {
119
+ return {
120
+ status: WorkspaceStatus.EXISTING_OR_UNKNOWN_PROJECT,
121
+ canCreate: false,
122
+ target: resolvedTarget,
123
+ exists: true,
124
+ conflicts: projectConflicts,
125
+ preservedInputEntries: []
126
+ };
127
+ }
128
+ // 分析是否全是 AI 配置或受保护输入
129
+ let hasAiOnly = true;
130
+ const preservedInputs = [];
131
+ for (const entry of entries) {
132
+ const lower = entry.toLowerCase();
133
+ if (KNOWN_AI_AND_META_ENTRIES.has(lower)) {
134
+ continue;
135
+ }
136
+ hasAiOnly = false;
137
+ // 属于非冲突的用户保留文件(如 docs, prd.md, design.md 等)
138
+ preservedInputs.push(entry);
139
+ }
140
+ if (hasAiOnly) {
141
+ return {
142
+ status: WorkspaceStatus.AI_CONFIG_ONLY,
143
+ canCreate: true,
144
+ target: resolvedTarget,
145
+ exists: true,
146
+ conflicts: [],
147
+ preservedInputEntries: []
148
+ };
149
+ }
150
+ return {
151
+ status: WorkspaceStatus.PRESERVED_INPUT_ONLY,
152
+ canCreate: true,
153
+ target: resolvedTarget,
154
+ exists: true,
155
+ conflicts: [],
156
+ preservedInputEntries: preservedInputs
157
+ };
158
+ }
159
+ /**
160
+ * 预检计划写入的文件与已有文件是否存在冲突
161
+ */
162
+ export function checkPlannedConflicts(targetDir, plannedRelativeFiles) {
163
+ const conflicts = [];
164
+ for (const relFile of plannedRelativeFiles) {
165
+ const fullPath = resolve(targetDir, relFile);
166
+ if (existsSync(fullPath)) {
167
+ conflicts.push(relFile);
168
+ }
169
+ }
170
+ return conflicts;
171
+ }
172
172
  //# sourceMappingURL=safety.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"safety.js","sourceRoot":"","sources":["../../src/common/safety.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"safety.js","sourceRoot":"","sources":["../../src/common/safety.ts"],"names":[],"mappings":"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"}
@@ -1,115 +1,115 @@
1
- import { existsSync, readdirSync, statSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
2
- import { join, dirname, relative } from 'node:path';
3
- /**
4
- * 将变量替换为模板内容
5
- */
6
- export function renderTemplateString(content, variables) {
7
- let result = content;
8
- Object.keys(variables).forEach((key) => {
9
- const value = variables[key];
10
- const regexp = new RegExp(`<%=\\s*${key}\\s*%>`, 'g');
11
- let strValue = '';
12
- if (typeof value === 'object' && value !== null) {
13
- if (Array.isArray(value)) {
14
- strValue = JSON.stringify(value);
15
- }
16
- else {
17
- strValue = JSON.stringify(value, null, 2);
18
- }
19
- }
20
- else {
21
- strValue = String(value ?? '');
22
- }
23
- result = result.replace(regexp, () => strValue);
24
- });
25
- return result;
26
- }
27
- /**
28
- * 检测文件内容中未被替换的 <%= xxx %> 占位符
29
- */
30
- export function findUnreplacedPlaceholders(content) {
31
- const matches = content.match(/<%=\s*[\w.-]+\s*%>/g);
32
- return matches ? Array.from(new Set(matches)) : [];
33
- }
34
- /**
35
- * 仅枚举模板渲染后会写入的相对路径,不产生任何文件系统写入。
36
- */
37
- export function collectTemplateOutputPaths(sourceDir, filter) {
38
- const outputs = [];
39
- function walk(currentSrc) {
40
- if (!existsSync(currentSrc)) {
41
- return;
42
- }
43
- for (const entry of readdirSync(currentSrc)) {
44
- const srcPath = join(currentSrc, entry);
45
- const relativePath = relative(sourceDir, srcPath).replace(/\\/g, '/');
46
- if (filter && !filter(relativePath)) {
47
- continue;
48
- }
49
- if (statSync(srcPath).isDirectory()) {
50
- walk(srcPath);
51
- }
52
- else {
53
- outputs.push(relativePath.endsWith('.tpl') ? relativePath.slice(0, -4) : relativePath);
54
- }
55
- }
56
- }
57
- walk(sourceDir);
58
- return outputs;
59
- }
60
- /**
61
- * 递归渲染模板目录到目标目录
62
- */
63
- export function renderTemplateDir(options) {
64
- const { sourceDir, targetDir, variables, skipExisting = false, filter } = options;
65
- const filesCreated = [];
66
- const unreplaced = [];
67
- function walk(currentSrc, currentTarget) {
68
- if (!existsSync(currentSrc)) {
69
- return;
70
- }
71
- const entries = readdirSync(currentSrc);
72
- for (const entry of entries) {
73
- const srcPath = join(currentSrc, entry);
74
- const stat = statSync(srcPath);
75
- const relPath = relative(sourceDir, srcPath).replace(/\\/g, '/');
76
- if (filter && !filter(relPath)) {
77
- continue;
78
- }
79
- if (stat.isDirectory()) {
80
- const nextTarget = join(currentTarget, entry);
81
- walk(srcPath, nextTarget);
82
- }
83
- else {
84
- // 去掉 .tpl 后缀
85
- let targetFileName = entry;
86
- if (targetFileName.endsWith('.tpl')) {
87
- targetFileName = targetFileName.slice(0, -4);
88
- }
89
- const targetFilePath = join(currentTarget, targetFileName);
90
- if (existsSync(targetFilePath) && skipExisting) {
91
- continue;
92
- }
93
- const rawContent = readFileSync(srcPath, 'utf-8');
94
- const rendered = renderTemplateString(rawContent, variables);
95
- const leftovers = findUnreplacedPlaceholders(rendered);
96
- if (leftovers.length > 0) {
97
- leftovers.forEach((p) => {
98
- unreplaced.push({ file: targetFilePath, placeholder: p });
99
- });
100
- }
101
- if (!existsSync(dirname(targetFilePath))) {
102
- mkdirSync(dirname(targetFilePath), { recursive: true });
103
- }
104
- writeFileSync(targetFilePath, rendered, 'utf-8');
105
- filesCreated.push(targetFilePath);
106
- }
107
- }
108
- }
109
- walk(sourceDir, targetDir);
110
- return {
111
- filesCreated,
112
- unreplacedPlaceholders: unreplaced
113
- };
114
- }
1
+ import { existsSync, readdirSync, statSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
2
+ import { join, dirname, relative } from 'node:path';
3
+ /**
4
+ * 将变量替换为模板内容
5
+ */
6
+ export function renderTemplateString(content, variables) {
7
+ let result = content;
8
+ Object.keys(variables).forEach((key) => {
9
+ const value = variables[key];
10
+ const regexp = new RegExp(`<%=\\s*${key}\\s*%>`, 'g');
11
+ let strValue = '';
12
+ if (typeof value === 'object' && value !== null) {
13
+ if (Array.isArray(value)) {
14
+ strValue = JSON.stringify(value);
15
+ }
16
+ else {
17
+ strValue = JSON.stringify(value, null, 2);
18
+ }
19
+ }
20
+ else {
21
+ strValue = String(value ?? '');
22
+ }
23
+ result = result.replace(regexp, () => strValue);
24
+ });
25
+ return result;
26
+ }
27
+ /**
28
+ * 检测文件内容中未被替换的 <%= xxx %> 占位符
29
+ */
30
+ export function findUnreplacedPlaceholders(content) {
31
+ const matches = content.match(/<%=\s*[\w.-]+\s*%>/g);
32
+ return matches ? Array.from(new Set(matches)) : [];
33
+ }
34
+ /**
35
+ * 仅枚举模板渲染后会写入的相对路径,不产生任何文件系统写入。
36
+ */
37
+ export function collectTemplateOutputPaths(sourceDir, filter) {
38
+ const outputs = [];
39
+ function walk(currentSrc) {
40
+ if (!existsSync(currentSrc)) {
41
+ return;
42
+ }
43
+ for (const entry of readdirSync(currentSrc)) {
44
+ const srcPath = join(currentSrc, entry);
45
+ const relativePath = relative(sourceDir, srcPath).replace(/\\/g, '/');
46
+ if (filter && !filter(relativePath)) {
47
+ continue;
48
+ }
49
+ if (statSync(srcPath).isDirectory()) {
50
+ walk(srcPath);
51
+ }
52
+ else {
53
+ outputs.push(relativePath.endsWith('.tpl') ? relativePath.slice(0, -4) : relativePath);
54
+ }
55
+ }
56
+ }
57
+ walk(sourceDir);
58
+ return outputs;
59
+ }
60
+ /**
61
+ * 递归渲染模板目录到目标目录
62
+ */
63
+ export function renderTemplateDir(options) {
64
+ const { sourceDir, targetDir, variables, skipExisting = false, filter } = options;
65
+ const filesCreated = [];
66
+ const unreplaced = [];
67
+ function walk(currentSrc, currentTarget) {
68
+ if (!existsSync(currentSrc)) {
69
+ return;
70
+ }
71
+ const entries = readdirSync(currentSrc);
72
+ for (const entry of entries) {
73
+ const srcPath = join(currentSrc, entry);
74
+ const stat = statSync(srcPath);
75
+ const relPath = relative(sourceDir, srcPath).replace(/\\/g, '/');
76
+ if (filter && !filter(relPath)) {
77
+ continue;
78
+ }
79
+ if (stat.isDirectory()) {
80
+ const nextTarget = join(currentTarget, entry);
81
+ walk(srcPath, nextTarget);
82
+ }
83
+ else {
84
+ // 去掉 .tpl 后缀
85
+ let targetFileName = entry;
86
+ if (targetFileName.endsWith('.tpl')) {
87
+ targetFileName = targetFileName.slice(0, -4);
88
+ }
89
+ const targetFilePath = join(currentTarget, targetFileName);
90
+ if (existsSync(targetFilePath) && skipExisting) {
91
+ continue;
92
+ }
93
+ const rawContent = readFileSync(srcPath, 'utf-8');
94
+ const rendered = renderTemplateString(rawContent, variables);
95
+ const leftovers = findUnreplacedPlaceholders(rendered);
96
+ if (leftovers.length > 0) {
97
+ leftovers.forEach((p) => {
98
+ unreplaced.push({ file: targetFilePath, placeholder: p });
99
+ });
100
+ }
101
+ if (!existsSync(dirname(targetFilePath))) {
102
+ mkdirSync(dirname(targetFilePath), { recursive: true });
103
+ }
104
+ writeFileSync(targetFilePath, rendered, 'utf-8');
105
+ filesCreated.push(targetFilePath);
106
+ }
107
+ }
108
+ }
109
+ walk(sourceDir, targetDir);
110
+ return {
111
+ filesCreated,
112
+ unreplacedPlaceholders: unreplaced
113
+ };
114
+ }
115
115
  //# sourceMappingURL=template-renderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"template-renderer.js","sourceRoot":"","sources":["../../src/common/template-renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"template-renderer.js","sourceRoot":"","sources":["../../src/common/template-renderer.ts"],"names":[],"mappings":"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"}