loopwind 0.10.0 โ†’ 0.10.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.
@@ -12,16 +12,23 @@ export declare function ensureTemplatesDir(): Promise<void>;
12
12
  export declare function ensureOutputDir(): Promise<void>;
13
13
  /**
14
14
  * Get all installed template names
15
+ * Includes both folder-based and single-file templates
15
16
  */
16
17
  export declare function getInstalledTemplates(): Promise<string[]>;
17
18
  /**
18
19
  * Check if a template is installed
20
+ * Checks for both folder-based and single-file templates
19
21
  */
20
22
  export declare function isTemplateInstalled(name: string): Promise<boolean>;
21
23
  /**
22
24
  * Get the path to a template's main file
23
25
  * Note: This is a sync function for backwards compatibility
24
26
  * It uses default paths - for custom paths, use getTemplatePathAsync
27
+ *
28
+ * Resolution order:
29
+ * 1. templates/{name}/template.tsx (folder with template.tsx)
30
+ * 2. templates/{name}.tsx (single file)
31
+ * 3. templates/{name}/{name}.tsx (folder with named file - legacy)
25
32
  */
26
33
  export declare function getTemplatePath(name: string): string;
27
34
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAGvD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAGxD;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAGrD;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAW/D;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASxE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBpD;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmE7F;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAWtF;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAsDlF"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAGvD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAGxD;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAGrD;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAsB/D;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAkBxE;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAmBpD;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgF7F;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAWtF;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAsDlF"}
package/dist/lib/utils.js CHANGED
@@ -26,15 +26,25 @@ export async function ensureOutputDir() {
26
26
  }
27
27
  /**
28
28
  * Get all installed template names
29
+ * Includes both folder-based and single-file templates
29
30
  */
30
31
  export async function getInstalledTemplates() {
31
32
  try {
32
33
  await ensureTemplatesDir();
33
34
  const paths = await getResolvedPaths();
34
35
  const entries = await fs.readdir(paths.templates, { withFileTypes: true });
35
- return entries
36
- .filter(entry => entry.isDirectory())
37
- .map(entry => entry.name);
36
+ const templates = [];
37
+ for (const entry of entries) {
38
+ if (entry.isDirectory()) {
39
+ // Folder-based template
40
+ templates.push(entry.name);
41
+ }
42
+ else if (entry.isFile() && entry.name.endsWith('.tsx')) {
43
+ // Single-file template
44
+ templates.push(entry.name.replace('.tsx', ''));
45
+ }
46
+ }
47
+ return templates;
38
48
  }
39
49
  catch (error) {
40
50
  return [];
@@ -42,36 +52,57 @@ export async function getInstalledTemplates() {
42
52
  }
43
53
  /**
44
54
  * Check if a template is installed
55
+ * Checks for both folder-based and single-file templates
45
56
  */
46
57
  export async function isTemplateInstalled(name) {
47
58
  const paths = await getResolvedPaths();
48
- const templatePath = path.join(paths.templates, name);
59
+ // Check for folder-based template
60
+ const folderPath = path.join(paths.templates, name);
49
61
  try {
50
- await fs.access(templatePath);
62
+ await fs.access(folderPath);
51
63
  return true;
52
64
  }
53
65
  catch {
54
- return false;
66
+ // Check for single-file template
67
+ const singleFilePath = path.join(paths.templates, `${name}.tsx`);
68
+ try {
69
+ await fs.access(singleFilePath);
70
+ return true;
71
+ }
72
+ catch {
73
+ return false;
74
+ }
55
75
  }
56
76
  }
57
77
  /**
58
78
  * Get the path to a template's main file
59
79
  * Note: This is a sync function for backwards compatibility
60
80
  * It uses default paths - for custom paths, use getTemplatePathAsync
81
+ *
82
+ * Resolution order:
83
+ * 1. templates/{name}/template.tsx (folder with template.tsx)
84
+ * 2. templates/{name}.tsx (single file)
85
+ * 3. templates/{name}/{name}.tsx (folder with named file - legacy)
61
86
  */
62
87
  export function getTemplatePath(name) {
63
88
  const basePath = path.join(TEMPLATES_DIR, name);
64
- // Try template.tsx first (default templates use this naming)
89
+ // Try template.tsx in folder first
65
90
  const templatePath = path.join(basePath, 'template.tsx');
66
- // Fallback to {name}.tsx for backwards compatibility
67
- const namedPath = path.join(basePath, `${name}.tsx`);
68
- // Check which one exists (synchronously for simplicity)
69
91
  try {
70
92
  accessSync(templatePath);
71
93
  return templatePath;
72
94
  }
73
95
  catch {
74
- return namedPath;
96
+ // Try single file {name}.tsx
97
+ const singleFilePath = path.join(TEMPLATES_DIR, `${name}.tsx`);
98
+ try {
99
+ accessSync(singleFilePath);
100
+ return singleFilePath;
101
+ }
102
+ catch {
103
+ // Fallback to {name}/{name}.tsx for legacy
104
+ return path.join(basePath, `${name}.tsx`);
105
+ }
75
106
  }
76
107
  }
77
108
  /**
@@ -85,16 +116,29 @@ export async function getTemplatePathAsync(name, relativeTo) {
85
116
  const paths = await getResolvedPaths();
86
117
  // Check if this is an absolute path (e.g., from SDK temp dir)
87
118
  if (path.isAbsolute(name)) {
88
- // Try template.tsx first
119
+ // If the path itself is a .tsx file, use it directly
120
+ if (name.endsWith('.tsx')) {
121
+ return name;
122
+ }
123
+ // Try template.tsx in folder first
89
124
  const templatePath = path.join(name, 'template.tsx');
90
125
  try {
91
126
  await fs.access(templatePath);
92
127
  return templatePath;
93
128
  }
94
129
  catch {
95
- // Fallback to {basename}.tsx
130
+ // Try single file (parent dir + {basename}.tsx)
96
131
  const baseName = path.basename(name);
97
- return path.join(name, `${baseName}.tsx`);
132
+ const parentDir = path.dirname(name);
133
+ const singleFilePath = path.join(parentDir, `${baseName}.tsx`);
134
+ try {
135
+ await fs.access(singleFilePath);
136
+ return singleFilePath;
137
+ }
138
+ catch {
139
+ // Fallback to {name}/{basename}.tsx for legacy
140
+ return path.join(name, `${baseName}.tsx`);
141
+ }
98
142
  }
99
143
  }
100
144
  // Check if this is a relative path
@@ -102,44 +146,50 @@ export async function getTemplatePathAsync(name, relativeTo) {
102
146
  if (isRelativePath && relativeTo) {
103
147
  // Resolve relative to the provided template directory
104
148
  const resolvedPath = path.resolve(path.dirname(relativeTo), name);
105
- // Try template.tsx first
149
+ // If the path itself is a .tsx file, use it directly
150
+ if (resolvedPath.endsWith('.tsx')) {
151
+ return resolvedPath;
152
+ }
153
+ // Try template.tsx in folder first
106
154
  const templatePath = path.join(resolvedPath, 'template.tsx');
107
- // Fallback to checking if the path itself is a .tsx file
108
- const directPath = resolvedPath.endsWith('.tsx') ? resolvedPath : null;
109
- // Fallback to {name}.tsx using the last segment of the path
110
- const baseName = path.basename(resolvedPath);
111
- const namedPath = path.join(resolvedPath, `${baseName}.tsx`);
112
- // Check which one exists
113
155
  try {
114
156
  await fs.access(templatePath);
115
157
  return templatePath;
116
158
  }
117
159
  catch {
118
- if (directPath) {
119
- try {
120
- await fs.access(directPath);
121
- return directPath;
122
- }
123
- catch {
124
- // Continue to namedPath
125
- }
160
+ // Try single file (parent dir + {basename}.tsx)
161
+ const baseName = path.basename(resolvedPath);
162
+ const parentDir = path.dirname(resolvedPath);
163
+ const singleFilePath = path.join(parentDir, `${baseName}.tsx`);
164
+ try {
165
+ await fs.access(singleFilePath);
166
+ return singleFilePath;
167
+ }
168
+ catch {
169
+ // Fallback to {name}/{basename}.tsx for legacy
170
+ return path.join(resolvedPath, `${baseName}.tsx`);
126
171
  }
127
- return namedPath;
128
172
  }
129
173
  }
130
174
  // Default behavior: resolve from templates directory
131
175
  const basePath = path.join(paths.templates, name);
132
- // Try template.tsx first (default templates use this naming)
176
+ // Try template.tsx in folder first
133
177
  const templatePath = path.join(basePath, 'template.tsx');
134
- // Fallback to {name}.tsx for backwards compatibility
135
- const namedPath = path.join(basePath, `${name}.tsx`);
136
- // Check which one exists
137
178
  try {
138
179
  await fs.access(templatePath);
139
180
  return templatePath;
140
181
  }
141
182
  catch {
142
- return namedPath;
183
+ // Try single file {name}.tsx
184
+ const singleFilePath = path.join(paths.templates, `${name}.tsx`);
185
+ try {
186
+ await fs.access(singleFilePath);
187
+ return singleFilePath;
188
+ }
189
+ catch {
190
+ // Fallback to {name}/{name}.tsx for legacy
191
+ return path.join(basePath, `${name}.tsx`);
192
+ }
143
193
  }
144
194
  }
145
195
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAA4B,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACvC,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACvC,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACvC,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,IAAI,CAAC;QACH,MAAM,kBAAkB,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3E,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,wBAAwB;gBACxB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzD,uBAAuB;gBACvB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAY;IACpD,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAEvC,kCAAkC;IAClC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;QACjC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAEhD,mCAAmC;IACnC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,UAAU,CAAC,YAAY,CAAC,CAAC;QACzB,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,6BAA6B;QAC7B,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC;QAC/D,IAAI,CAAC;YACH,UAAU,CAAC,cAAc,CAAC,CAAC;YAC3B,OAAO,cAAc,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,2CAA2C;YAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAY,EAAE,UAAmB;IAC1E,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAEvC,8DAA8D;IAC9D,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,qDAAqD;QACrD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,mCAAmC;QACnC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACrD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC9B,OAAO,YAAY,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,gDAAgD;YAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,QAAQ,MAAM,CAAC,CAAC;YAC/D,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBAChC,OAAO,cAAc,CAAC;YACxB,CAAC;YAAC,MAAM,CAAC;gBACP,+CAA+C;gBAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,QAAQ,MAAM,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAEvE,IAAI,cAAc,IAAI,UAAU,EAAE,CAAC;QACjC,sDAAsD;QACtD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC;QAElE,qDAAqD;QACrD,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,mCAAmC;QACnC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QAC7D,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC9B,OAAO,YAAY,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,gDAAgD;YAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,QAAQ,MAAM,CAAC,CAAC;YAC/D,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBAChC,OAAO,cAAc,CAAC;YACxB,CAAC;YAAC,MAAM,CAAC;gBACP,+CAA+C;gBAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,QAAQ,MAAM,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAElD,mCAAmC;IACnC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC9B,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,6BAA6B;QAC7B,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAChC,OAAO,cAAc,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,2CAA2C;YAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,UAAmB;IACtE,+DAA+D;IAC/D,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IAEvD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAExD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,wFAAwF,CAAC,CAAC;IAC7H,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAmB;IAClD,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAE3B,IAAI,CAAC;QACH,4BAA4B;QAC5B,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBACvD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;YAAC,OAAO,SAAS,EAAE,CAAC;gBACnB,MAAM,GAAG,GAAG,SAAsC,CAAC;gBACnD,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC1B,MAAM,IAAI,KAAK,CACb,yBAAyB,UAAU,MAAM;wBACzC,oDAAoD,CACrD,CAAC;gBACJ,CAAC;gBACD,MAAM,SAAS,CAAC;YAClB,CAAC;QACH,CAAC;QAED,kCAAkC;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,sEAAsE;QACtE,MAAM,GAAG,GAAG,KAAc,CAAC;QAC3B,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;YACjD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,oFAAoF;QACpF,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzH,MAAM,IAAI,KAAK,CACb,+EAA+E;gBAC/E,qBAAqB;gBACrB,iCAAiC,UAAU,OAAO;gBAClD,8DAA8D,CAC/D,CAAC;QACJ,CAAC;QAED,0DAA0D;QAC1D,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,+BAA+B,GAAG,CAAC,OAAO,MAAM;gBAChD,qDAAqD;gBACrD,+DAA+D;gBAC/D,sDAAsD;gBACtD,4EAA4E,CAC7E,CAAC;QACJ,CAAC;QAED,wBAAwB;QACxB,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "loopwind",
3
- "version": "0.10.0",
3
+ "version": "0.10.1",
4
4
  "description": "A CLI tool for AI code agents and developers for generating images and videos.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,39 +1,44 @@
1
1
  #!/bin/bash
2
2
 
3
3
  # Test script for loopwind templates
4
- # Outputs to test-templates/_loopwind/outputs/
4
+ # Outputs to test-templates/output/
5
5
 
6
6
  cd "$(dirname "$0")"
7
7
 
8
+ # Use local build
9
+ LW="node ../dist/cli.js"
10
+
8
11
  echo "๐Ÿงช Running loopwind template tests..."
9
12
  echo ""
10
13
 
14
+ mkdir -p output
15
+
11
16
  # Static image test
12
17
  echo "๐Ÿ“ท Testing static-image..."
13
- loopwind render static-image '{"title":"Hello World","subtitle":"Testing static image template"}' --out _loopwind/outputs/static-image.png
18
+ $LW render static-image '{"title":"Hello World","subtitle":"Testing static image template"}' --out output/static-image.png
14
19
 
15
20
  # QR code test
16
21
  echo "๐Ÿ“ฑ Testing qr-code..."
17
- loopwind render qr-code '{"url":"https://loopwind.dev","title":"Scan to visit"}' --out _loopwind/outputs/qr-code.png
22
+ $LW render qr-code '{"url":"https://loopwind.dev","title":"Scan to visit"}' --out output/qr-code.png
18
23
 
19
24
  # Composite template test
20
25
  echo "๐Ÿงฉ Testing composite..."
21
- loopwind render composite '{"title":"Composite Test","qrUrl":"https://github.com/tomtev/loopwind"}' --out _loopwind/outputs/composite.png
26
+ $LW render composite '{"title":"Composite Test","qrUrl":"https://github.com/tomtev/loopwind"}' --out output/composite.png
22
27
 
23
28
  # Animated intro video test
24
29
  echo "๐ŸŽฌ Testing animated-intro..."
25
- loopwind render animated-intro '{"title":"Welcome","subtitle":"Animation classes test"}' --out _loopwind/outputs/animated-intro.mp4
30
+ $LW render animated-intro '{"title":"Welcome","subtitle":"Animation classes test"}' --out output/animated-intro.mp4
26
31
 
27
32
  # Video loops test
28
33
  echo "๐Ÿ”„ Testing video-loops..."
29
- loopwind render video-loops '{"title":"Loop Test"}' --out _loopwind/outputs/video-loops.mp4
34
+ $LW render video-loops '{"title":"Loop Test"}' --out output/video-loops.mp4
30
35
 
31
36
  # Easing test video
32
37
  echo "๐Ÿ“ˆ Testing easing-test..."
33
- loopwind render easing-test '{}' --out _loopwind/outputs/easing-test.mp4
38
+ $LW render easing-test '{}' --out output/easing-test.mp4
34
39
 
35
40
  echo ""
36
- echo "โœ… All tests complete! Check _loopwind/outputs/ for results."
41
+ echo "โœ… All tests complete! Check output/ for results."
37
42
  echo ""
38
43
  echo "Output files:"
39
- ls -la _loopwind/outputs/
44
+ ls -la output/