@ketrics/ketrics-cli 0.4.0 → 0.6.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.
Files changed (40) hide show
  1. package/dist/src/cli.d.ts.map +1 -1
  2. package/dist/src/cli.js +15 -0
  3. package/dist/src/cli.js.map +1 -1
  4. package/dist/src/commands/create.d.ts +1 -0
  5. package/dist/src/commands/create.d.ts.map +1 -1
  6. package/dist/src/commands/create.js +44 -13
  7. package/dist/src/commands/create.js.map +1 -1
  8. package/dist/src/commands/update.d.ts +13 -0
  9. package/dist/src/commands/update.d.ts.map +1 -0
  10. package/dist/src/commands/update.js +78 -0
  11. package/dist/src/commands/update.js.map +1 -0
  12. package/dist/src/services/local-template-service.d.ts +52 -0
  13. package/dist/src/services/local-template-service.d.ts.map +1 -0
  14. package/dist/src/services/local-template-service.js +216 -0
  15. package/dist/src/services/local-template-service.js.map +1 -0
  16. package/dist/src/services/remote-template-service.d.ts +41 -0
  17. package/dist/src/services/remote-template-service.d.ts.map +1 -0
  18. package/dist/src/services/remote-template-service.js +232 -0
  19. package/dist/src/services/remote-template-service.js.map +1 -0
  20. package/dist/src/services/template-cache-service.d.ts +44 -0
  21. package/dist/src/services/template-cache-service.d.ts.map +1 -0
  22. package/dist/src/services/template-cache-service.js +193 -0
  23. package/dist/src/services/template-cache-service.js.map +1 -0
  24. package/dist/src/services/template-service.d.ts +25 -31
  25. package/dist/src/services/template-service.d.ts.map +1 -1
  26. package/dist/src/services/template-service.js +136 -132
  27. package/dist/src/services/template-service.js.map +1 -1
  28. package/dist/src/types/index.d.ts +46 -0
  29. package/dist/src/types/index.d.ts.map +1 -1
  30. package/dist/src/types/index.js.map +1 -1
  31. package/dist/src/version.d.ts +1 -1
  32. package/dist/src/version.js +1 -1
  33. package/package.json +5 -1
  34. package/templates/HelloWorld/.claude/skills/ketrics-app/BACKEND_REFERENCE.md +693 -0
  35. package/templates/HelloWorld/.claude/skills/ketrics-app/CONFIG_AND_DEPLOY.md +278 -0
  36. package/templates/HelloWorld/.claude/skills/ketrics-app/FRONTEND_REFERENCE.md +325 -0
  37. package/templates/HelloWorld/.claude/skills/ketrics-app/SKILL.md +348 -0
  38. package/templates/HelloWorld/.env.example +20 -0
  39. package/templates/HelloWorld/.github/workflows/deploy.yml +51 -0
  40. package/templates/HelloWorld/backend/package.json +1 -1
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ /**
3
+ * Remote Template Service
4
+ *
5
+ * Fetches templates from the public ketrics-application-templates GitHub repository.
6
+ * Uses GitHub tarball download for efficient single-request fetching.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __importDefault = (this && this.__importDefault) || function (mod) {
42
+ return (mod && mod.__esModule) ? mod : { "default": mod };
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.fetchManifest = fetchManifest;
46
+ exports.downloadAndExtractTarball = downloadAndExtractTarball;
47
+ exports.extractTemplate = extractTemplate;
48
+ exports.readTemplateConfig = readTemplateConfig;
49
+ exports.applyPlaceholders = applyPlaceholders;
50
+ exports.manifestToTemplateInfos = manifestToTemplateInfos;
51
+ exports.getTemplateFilesFromDir = getTemplateFilesFromDir;
52
+ exports.cleanupTmpDir = cleanupTmpDir;
53
+ const fs = __importStar(require("fs"));
54
+ const path = __importStar(require("path"));
55
+ const os = __importStar(require("os"));
56
+ const zlib = __importStar(require("zlib"));
57
+ const promises_1 = require("stream/promises");
58
+ const axios_1 = __importDefault(require("axios"));
59
+ const tar = __importStar(require("tar"));
60
+ const TEMPLATE_REPO_OWNER = 'ketrics-io';
61
+ const TEMPLATE_REPO_NAME = 'ketrics-application-templates';
62
+ const TEMPLATE_BRANCH = 'main';
63
+ const MANIFEST_URL = `https://raw.githubusercontent.com/${TEMPLATE_REPO_OWNER}/${TEMPLATE_REPO_NAME}/${TEMPLATE_BRANCH}/templates.json`;
64
+ const TARBALL_URL = `https://api.github.com/repos/${TEMPLATE_REPO_OWNER}/${TEMPLATE_REPO_NAME}/tarball/${TEMPLATE_BRANCH}`;
65
+ /**
66
+ * Fetch the templates.json manifest from the remote repository
67
+ */
68
+ async function fetchManifest() {
69
+ const response = await axios_1.default.get(MANIFEST_URL, {
70
+ timeout: 15000,
71
+ headers: {
72
+ 'Accept': 'application/json',
73
+ 'User-Agent': 'ketrics-cli',
74
+ },
75
+ });
76
+ const manifest = response.data;
77
+ if (typeof manifest.version !== 'number' || !Array.isArray(manifest.templates)) {
78
+ throw new Error('Invalid manifest format');
79
+ }
80
+ return manifest;
81
+ }
82
+ /**
83
+ * Download and extract the repo tarball to a temporary directory.
84
+ * Returns the path to the extracted repo root.
85
+ */
86
+ async function downloadAndExtractTarball() {
87
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'ketrics-templates-'));
88
+ const response = await axios_1.default.get(TARBALL_URL, {
89
+ responseType: 'stream',
90
+ timeout: 60000,
91
+ headers: {
92
+ 'Accept': 'application/vnd.github+json',
93
+ 'User-Agent': 'ketrics-cli',
94
+ },
95
+ });
96
+ await (0, promises_1.pipeline)(response.data, zlib.createGunzip(), tar.extract({ cwd: tmpDir }));
97
+ // GitHub tarball extracts into a directory like: ketrics-io-ketrics-application-templates-<sha>/
98
+ const entries = fs.readdirSync(tmpDir);
99
+ const repoDir = entries.find((e) => fs.statSync(path.join(tmpDir, e)).isDirectory());
100
+ if (!repoDir) {
101
+ throw new Error('Failed to find extracted repository directory');
102
+ }
103
+ return path.join(tmpDir, repoDir);
104
+ }
105
+ /**
106
+ * Extract a specific template from the downloaded repo to a destination directory.
107
+ */
108
+ function extractTemplate(repoDir, templateEntry, destDir, ignorePatterns = []) {
109
+ const templateSrc = path.join(repoDir, templateEntry.path);
110
+ if (!fs.existsSync(templateSrc)) {
111
+ throw new Error(`Template directory not found in repository: ${templateEntry.path}`);
112
+ }
113
+ copyDirRecursive(templateSrc, destDir, ignorePatterns);
114
+ }
115
+ /**
116
+ * Read template.json config from a template directory
117
+ */
118
+ function readTemplateConfig(templateDir) {
119
+ const configPath = path.join(templateDir, 'template.json');
120
+ if (!fs.existsSync(configPath)) {
121
+ return null;
122
+ }
123
+ try {
124
+ const content = fs.readFileSync(configPath, 'utf-8');
125
+ return JSON.parse(content);
126
+ }
127
+ catch {
128
+ return null;
129
+ }
130
+ }
131
+ /**
132
+ * Apply placeholders defined in template.json
133
+ */
134
+ function applyPlaceholders(projectDir, templateConfig, values) {
135
+ for (const [key, placeholder] of Object.entries(templateConfig.placeholders)) {
136
+ const value = values[key];
137
+ if (!value)
138
+ continue;
139
+ for (const filePath of placeholder.files) {
140
+ const fullPath = path.join(projectDir, filePath);
141
+ if (!fs.existsSync(fullPath))
142
+ continue;
143
+ if (placeholder.jsonField) {
144
+ try {
145
+ const content = fs.readFileSync(fullPath, 'utf-8');
146
+ const json = JSON.parse(content);
147
+ json[placeholder.jsonField] = value;
148
+ fs.writeFileSync(fullPath, JSON.stringify(json, null, 2) + '\n', 'utf-8');
149
+ }
150
+ catch {
151
+ // Skip files that can't be parsed
152
+ }
153
+ }
154
+ }
155
+ }
156
+ }
157
+ /**
158
+ * Convert manifest entries to TemplateInfo objects for display
159
+ */
160
+ function manifestToTemplateInfos(manifest, basePath) {
161
+ return manifest.templates.map((entry) => ({
162
+ name: entry.name,
163
+ path: path.join(basePath, entry.path),
164
+ description: entry.description,
165
+ source: 'remote',
166
+ minCliVersion: entry.minCliVersion,
167
+ minSdkVersion: entry.minSdkVersion,
168
+ tags: entry.tags,
169
+ }));
170
+ }
171
+ /**
172
+ * Get files that will be copied from a directory (for display)
173
+ */
174
+ function getTemplateFilesFromDir(templateDir, ignorePatterns = []) {
175
+ const files = [];
176
+ function collectFiles(dir, relativePath = '') {
177
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
178
+ for (const entry of entries) {
179
+ const relPath = relativePath ? path.join(relativePath, entry.name) : entry.name;
180
+ if (shouldIgnore(entry.name, ignorePatterns))
181
+ continue;
182
+ if (entry.isDirectory()) {
183
+ collectFiles(path.join(dir, entry.name), relPath);
184
+ }
185
+ else {
186
+ files.push(relPath);
187
+ }
188
+ }
189
+ }
190
+ collectFiles(templateDir);
191
+ return files;
192
+ }
193
+ /**
194
+ * Clean up temporary directory
195
+ */
196
+ function cleanupTmpDir(tmpDir) {
197
+ try {
198
+ fs.rmSync(tmpDir, { recursive: true, force: true });
199
+ }
200
+ catch {
201
+ // Best effort cleanup
202
+ }
203
+ }
204
+ // ---- Internal helpers ----
205
+ function shouldIgnore(name, ignorePatterns) {
206
+ return ignorePatterns.some((pattern) => {
207
+ if (pattern === name)
208
+ return true;
209
+ if (pattern.endsWith('*') && name.startsWith(pattern.slice(0, -1)))
210
+ return true;
211
+ return false;
212
+ });
213
+ }
214
+ function copyDirRecursive(src, dest, ignorePatterns = []) {
215
+ if (!fs.existsSync(dest)) {
216
+ fs.mkdirSync(dest, { recursive: true });
217
+ }
218
+ const entries = fs.readdirSync(src, { withFileTypes: true });
219
+ for (const entry of entries) {
220
+ if (shouldIgnore(entry.name, ignorePatterns))
221
+ continue;
222
+ const srcPath = path.join(src, entry.name);
223
+ const destPath = path.join(dest, entry.name);
224
+ if (entry.isDirectory()) {
225
+ copyDirRecursive(srcPath, destPath, ignorePatterns);
226
+ }
227
+ else {
228
+ fs.copyFileSync(srcPath, destPath);
229
+ }
230
+ }
231
+ }
232
+ //# sourceMappingURL=remote-template-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-template-service.js","sourceRoot":"","sources":["../../../src/services/remote-template-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Template Cache Service
3
+ *
4
+ * Manages local caching of fetched remote templates.
5
+ * Cache location: ~/.ketrics/templates-cache/
6
+ */
7
+ import type { TemplateManifest } from '../types';
8
+ /**
9
+ * Check if the cached manifest is still fresh
10
+ */
11
+ export declare function isCacheFresh(): boolean;
12
+ /**
13
+ * Read cached manifest
14
+ */
15
+ export declare function getCachedManifest(): TemplateManifest | null;
16
+ /**
17
+ * Save manifest to cache
18
+ */
19
+ export declare function saveCachedManifest(manifest: TemplateManifest): void;
20
+ /**
21
+ * Get the path to a cached template directory
22
+ */
23
+ export declare function getCachedTemplatePath(templateName: string): string;
24
+ /**
25
+ * Check if a template is cached
26
+ */
27
+ export declare function isTemplateCached(templateName: string): boolean;
28
+ /**
29
+ * Save a template to the cache by copying from a source directory
30
+ */
31
+ export declare function cacheTemplate(templateName: string, sourceDir: string): void;
32
+ /**
33
+ * Get the cache directory path
34
+ */
35
+ export declare function getCacheDir(): string;
36
+ /**
37
+ * Get the cached templates directory path
38
+ */
39
+ export declare function getCachedTemplatesDir(): string;
40
+ /**
41
+ * Clear all cached templates
42
+ */
43
+ export declare function clearCache(): void;
44
+ //# sourceMappingURL=template-cache-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-cache-service.d.ts","sourceRoot":"","sources":["../../../src/services/template-cache-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,UAAU,CAAC;AAkCjE;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAmBtC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,gBAAgB,GAAG,IAAI,CAY3D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAUnE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAElE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAG9D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAW3E;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAIjC"}
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ /**
3
+ * Template Cache Service
4
+ *
5
+ * Manages local caching of fetched remote templates.
6
+ * Cache location: ~/.ketrics/templates-cache/
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.isCacheFresh = isCacheFresh;
43
+ exports.getCachedManifest = getCachedManifest;
44
+ exports.saveCachedManifest = saveCachedManifest;
45
+ exports.getCachedTemplatePath = getCachedTemplatePath;
46
+ exports.isTemplateCached = isTemplateCached;
47
+ exports.cacheTemplate = cacheTemplate;
48
+ exports.getCacheDir = getCacheDir;
49
+ exports.getCachedTemplatesDir = getCachedTemplatesDir;
50
+ exports.clearCache = clearCache;
51
+ const fs = __importStar(require("fs"));
52
+ const path = __importStar(require("path"));
53
+ const os = __importStar(require("os"));
54
+ const version_1 = require("../version");
55
+ const CACHE_BASE_DIR = path.join(os.homedir(), '.ketrics');
56
+ const CACHE_DIR = path.join(CACHE_BASE_DIR, 'templates-cache');
57
+ const MANIFEST_CACHE_FILE = path.join(CACHE_DIR, 'manifest.json');
58
+ const TEMPLATES_CACHE_DIR = path.join(CACHE_DIR, 'templates');
59
+ /** Default cache TTL: 24 hours */
60
+ const DEFAULT_CACHE_TTL_MS = 24 * 60 * 60 * 1000;
61
+ /**
62
+ * Get the cache TTL in milliseconds. Can be overridden via KETRICS_TEMPLATE_CACHE_TTL env var (in seconds).
63
+ */
64
+ function getCacheTtlMs() {
65
+ const envTtl = process.env.KETRICS_TEMPLATE_CACHE_TTL;
66
+ if (envTtl) {
67
+ const seconds = parseInt(envTtl, 10);
68
+ if (!isNaN(seconds) && seconds > 0) {
69
+ return seconds * 1000;
70
+ }
71
+ }
72
+ return DEFAULT_CACHE_TTL_MS;
73
+ }
74
+ /**
75
+ * Ensure the cache directories exist
76
+ */
77
+ function ensureCacheDir() {
78
+ if (!fs.existsSync(TEMPLATES_CACHE_DIR)) {
79
+ fs.mkdirSync(TEMPLATES_CACHE_DIR, { recursive: true });
80
+ }
81
+ }
82
+ /**
83
+ * Check if the cached manifest is still fresh
84
+ */
85
+ function isCacheFresh() {
86
+ if (!fs.existsSync(MANIFEST_CACHE_FILE)) {
87
+ return false;
88
+ }
89
+ try {
90
+ const content = fs.readFileSync(MANIFEST_CACHE_FILE, 'utf-8');
91
+ const cached = JSON.parse(content);
92
+ // Invalidate if CLI version changed (manifest format may differ)
93
+ if (cached.cliVersion !== version_1.VERSION) {
94
+ return false;
95
+ }
96
+ const age = Date.now() - cached.fetchedAt;
97
+ return age < getCacheTtlMs();
98
+ }
99
+ catch {
100
+ return false;
101
+ }
102
+ }
103
+ /**
104
+ * Read cached manifest
105
+ */
106
+ function getCachedManifest() {
107
+ if (!fs.existsSync(MANIFEST_CACHE_FILE)) {
108
+ return null;
109
+ }
110
+ try {
111
+ const content = fs.readFileSync(MANIFEST_CACHE_FILE, 'utf-8');
112
+ const cached = JSON.parse(content);
113
+ return cached.manifest;
114
+ }
115
+ catch {
116
+ return null;
117
+ }
118
+ }
119
+ /**
120
+ * Save manifest to cache
121
+ */
122
+ function saveCachedManifest(manifest) {
123
+ ensureCacheDir();
124
+ const cached = {
125
+ manifest,
126
+ fetchedAt: Date.now(),
127
+ cliVersion: version_1.VERSION,
128
+ };
129
+ fs.writeFileSync(MANIFEST_CACHE_FILE, JSON.stringify(cached, null, 2), 'utf-8');
130
+ }
131
+ /**
132
+ * Get the path to a cached template directory
133
+ */
134
+ function getCachedTemplatePath(templateName) {
135
+ return path.join(TEMPLATES_CACHE_DIR, templateName);
136
+ }
137
+ /**
138
+ * Check if a template is cached
139
+ */
140
+ function isTemplateCached(templateName) {
141
+ const templatePath = getCachedTemplatePath(templateName);
142
+ return fs.existsSync(templatePath) && fs.existsSync(path.join(templatePath, 'ketrics.config.json'));
143
+ }
144
+ /**
145
+ * Save a template to the cache by copying from a source directory
146
+ */
147
+ function cacheTemplate(templateName, sourceDir) {
148
+ ensureCacheDir();
149
+ const destDir = getCachedTemplatePath(templateName);
150
+ // Remove old cached version
151
+ if (fs.existsSync(destDir)) {
152
+ fs.rmSync(destDir, { recursive: true, force: true });
153
+ }
154
+ copyDirRecursive(sourceDir, destDir);
155
+ }
156
+ /**
157
+ * Get the cache directory path
158
+ */
159
+ function getCacheDir() {
160
+ return CACHE_DIR;
161
+ }
162
+ /**
163
+ * Get the cached templates directory path
164
+ */
165
+ function getCachedTemplatesDir() {
166
+ return TEMPLATES_CACHE_DIR;
167
+ }
168
+ /**
169
+ * Clear all cached templates
170
+ */
171
+ function clearCache() {
172
+ if (fs.existsSync(CACHE_DIR)) {
173
+ fs.rmSync(CACHE_DIR, { recursive: true, force: true });
174
+ }
175
+ }
176
+ // ---- Internal helpers ----
177
+ function copyDirRecursive(src, dest) {
178
+ if (!fs.existsSync(dest)) {
179
+ fs.mkdirSync(dest, { recursive: true });
180
+ }
181
+ const entries = fs.readdirSync(src, { withFileTypes: true });
182
+ for (const entry of entries) {
183
+ const srcPath = path.join(src, entry.name);
184
+ const destPath = path.join(dest, entry.name);
185
+ if (entry.isDirectory()) {
186
+ copyDirRecursive(srcPath, destPath);
187
+ }
188
+ else {
189
+ fs.copyFileSync(srcPath, destPath);
190
+ }
191
+ }
192
+ }
193
+ //# sourceMappingURL=template-cache-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-cache-service.js","sourceRoot":"","sources":["../../../src/services/template-cache-service.ts"],"names":[],"mappings":"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"}
@@ -1,51 +1,45 @@
1
1
  /**
2
- * Template Service
2
+ * Template Service (Orchestrator)
3
3
  *
4
- * Handles template discovery, listing, and copying for the init command.
4
+ * Coordinates between remote and local template sources.
5
+ * Strategy: remote-first with cache, falling back to bundled local templates.
5
6
  */
6
- import type { TemplateInfo } from '../types';
7
+ import type { TemplateInfo, TemplateConfig } from '../types';
7
8
  /**
8
- * Get list of available templates
9
+ * Get available templates, preferring remote with local fallback.
9
10
  */
10
- export declare function getAvailableTemplates(): TemplateInfo[];
11
+ export declare function getAvailableTemplates(options: {
12
+ refresh?: boolean;
13
+ local?: boolean;
14
+ }): Promise<TemplateInfo[]>;
11
15
  /**
12
16
  * Get a specific template by name
13
17
  */
14
- export declare function getTemplate(name: string): TemplateInfo | undefined;
18
+ export declare function getTemplate(name: string, options: {
19
+ refresh?: boolean;
20
+ local?: boolean;
21
+ }): Promise<TemplateInfo | undefined>;
15
22
  /**
16
- * Validation result for destination directory
23
+ * Copy a template to the destination directory.
24
+ * For remote templates: downloads, extracts, and copies from tarball.
25
+ * For local templates: copies from bundled directory.
17
26
  */
18
- export interface DestinationValidation {
19
- valid: boolean;
20
- errors: string[];
21
- }
27
+ export declare function copyTemplateToDestination(template: TemplateInfo, destDir: string): Promise<TemplateConfig | null>;
22
28
  /**
23
- * Validate destination directory before copying template
29
+ * Apply customizations to a copied template.
30
+ * Uses template.json placeholders if available, falls back to hardcoded updateAppName.
24
31
  */
25
- export declare function validateDestination(destDir: string): DestinationValidation;
32
+ export declare function applyCustomizations(projectDir: string, appName: string, templateConfig: TemplateConfig | null): void;
26
33
  /**
27
- * Copy template to destination directory
28
- */
29
- export declare function copyTemplate(template: TemplateInfo, destDir: string): void;
30
- /**
31
- * Get files that will be copied from template
34
+ * Get the list of files in a template (for display purposes)
32
35
  */
33
36
  export declare function getTemplateFiles(template: TemplateInfo): string[];
34
37
  /**
35
- * Update app name in project files
36
- *
37
- * Updates the name field in:
38
- * - ketrics.config.json
39
- * - frontend/package.json
40
- * - backend/package.json
41
- */
42
- export declare function updateAppName(projectDir: string, appName: string): void;
43
- /**
44
- * Check if a directory exists
38
+ * Clear the template cache
45
39
  */
46
- export declare function directoryExists(dirPath: string): boolean;
40
+ export declare function clearCache(): void;
47
41
  /**
48
- * Create a directory
42
+ * Re-export utilities needed by create command
49
43
  */
50
- export declare function createDirectory(dirPath: string): void;
44
+ export { directoryExists, createDirectory } from './local-template-service';
51
45
  //# sourceMappingURL=template-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"template-service.d.ts","sourceRoot":"","sources":["../../../src/services/template-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAqB7C;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,YAAY,EAAE,CA+BtD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAGlE;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,CAsB1E;AAyBD;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE,CAoBjE;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAmBvE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAErD"}
1
+ {"version":3,"file":"template-service.d.ts","sourceRoot":"","sources":["../../../src/services/template-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EACV,YAAY,EAGZ,cAAc,EAEf,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA8B1B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC9C,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAGnC;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAqChC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,cAAc,GAAG,IAAI,GACpC,IAAI,CASN;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE,CAajE;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAGjC;AAED;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC"}