@tanstack/cta-engine 0.15.1 → 0.15.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.
@@ -171,7 +171,7 @@ Use the following commands to start your app:
171
171
  % cd ${options.projectName}
172
172
  % ${formatCommand(getPackageManagerScriptCommand(options.packageManager, ['dev']))}
173
173
 
174
- Please check the README.md for more information on testing, styling, adding routes, etc.${errorStatement}`);
174
+ Please check the README.md for information on testing, styling, adding routes, etc.${errorStatement}`);
175
175
  }
176
176
  export async function createApp(environment, options) {
177
177
  environment.startRun();
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ export { DEFAULT_PACKAGE_MANAGER, SUPPORTED_PACKAGE_MANAGERS, getPackageManager,
9
9
  export { registerFramework, getFrameworkById, getFrameworkByName, getFrameworks, } from './frameworks.js';
10
10
  export { writeConfigFileToEnvironment, readConfigFileFromEnvironment, readConfigFile, } from './config-file.js';
11
11
  export { cleanUpFiles, cleanUpFileArray, readFileHelper, getBinaryFile, recursivelyGatherFiles, relativePath, } from './file-helpers.js';
12
- export { formatCommand } from './utils.js';
12
+ export { formatCommand, handleSpecialURL } from './utils.js';
13
13
  export { initStarter, compileStarter } from './custom-add-ons/starter.js';
14
14
  export { initAddOn, compileAddOn } from './custom-add-ons/add-on.js';
15
15
  export { createAppOptionsFromPersisted, createSerializedOptionsFromPersisted, } from './custom-add-ons/shared.js';
package/dist/registry.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { z } from 'zod';
2
2
  import { loadRemoteAddOn } from './custom-add-ons/add-on.js';
3
3
  import { loadStarter } from './custom-add-ons/starter.js';
4
+ import { handleSpecialURL } from './utils.js';
4
5
  const registrySchema = z.object({
5
6
  starters: z
6
7
  .array(z.object({
@@ -32,15 +33,16 @@ function absolutizeUrl(originalUrl, relativeUrl) {
32
33
  export async function getRawRegistry(registryUrl) {
33
34
  const regUrl = registryUrl || process.env.CTA_REGISTRY;
34
35
  if (regUrl) {
35
- const registry = (await fetch(regUrl).then((res) => res.json()));
36
+ const url = handleSpecialURL(regUrl);
37
+ const registry = (await fetch(url).then((res) => res.json()));
36
38
  const parsedRegistry = registrySchema.parse(registry);
37
39
  for (const addOn of parsedRegistry['add-ons'] || []) {
38
- addOn.url = absolutizeUrl(regUrl, addOn.url);
40
+ addOn.url = absolutizeUrl(url, addOn.url);
39
41
  }
40
42
  for (const starter of parsedRegistry.starters || []) {
41
- starter.url = absolutizeUrl(regUrl, starter.url);
43
+ starter.url = absolutizeUrl(url, starter.url);
42
44
  if (starter.banner) {
43
- starter.banner = absolutizeUrl(regUrl, starter.banner);
45
+ starter.banner = absolutizeUrl(url, starter.banner);
44
46
  }
45
47
  }
46
48
  return parsedRegistry;
@@ -9,7 +9,7 @@ export { DEFAULT_PACKAGE_MANAGER, SUPPORTED_PACKAGE_MANAGERS, getPackageManager,
9
9
  export { registerFramework, getFrameworkById, getFrameworkByName, getFrameworks, } from './frameworks.js';
10
10
  export { writeConfigFileToEnvironment, readConfigFileFromEnvironment, readConfigFile, } from './config-file.js';
11
11
  export { cleanUpFiles, cleanUpFileArray, readFileHelper, getBinaryFile, recursivelyGatherFiles, relativePath, } from './file-helpers.js';
12
- export { formatCommand } from './utils.js';
12
+ export { formatCommand, handleSpecialURL } from './utils.js';
13
13
  export { initStarter, compileStarter } from './custom-add-ons/starter.js';
14
14
  export { initAddOn, compileAddOn } from './custom-add-ons/add-on.js';
15
15
  export { createAppOptionsFromPersisted, createSerializedOptionsFromPersisted, } from './custom-add-ons/shared.js';
@@ -4,3 +4,4 @@ export declare function formatCommand({ command, args, }: {
4
4
  command: string;
5
5
  args: Array<string>;
6
6
  }): string;
7
+ export declare function handleSpecialURL(url: string): string;
package/dist/utils.js CHANGED
@@ -15,3 +15,17 @@ export function jsSafeName(name) {
15
15
  export function formatCommand({ command, args, }) {
16
16
  return `${command} ${args.join(' ')}`.trim();
17
17
  }
18
+ // Turn GitHub URLs into raw URLs
19
+ export function handleSpecialURL(url) {
20
+ if (url.startsWith('https://github.com/') && url.includes('blob')) {
21
+ return url
22
+ .replace('https://github.com/', 'https://raw.githubusercontent.com/')
23
+ .replace('/blob/', '/refs/heads/');
24
+ }
25
+ if (url.startsWith('https://github.com/') && url.includes('tree')) {
26
+ return url
27
+ .replace('https://github.com/', 'https://raw.githubusercontent.com/')
28
+ .replace('/tree/', '/refs/heads/');
29
+ }
30
+ return url;
31
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/cta-engine",
3
- "version": "0.15.1",
3
+ "version": "0.15.3",
4
4
  "description": "Tanstack Application Builder Engine",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
package/src/create-app.ts CHANGED
@@ -233,7 +233,7 @@ Use the following commands to start your app:
233
233
  getPackageManagerScriptCommand(options.packageManager, ['dev']),
234
234
  )}
235
235
 
236
- Please check the README.md for more information on testing, styling, adding routes, etc.${errorStatement}`,
236
+ Please check the README.md for information on testing, styling, adding routes, etc.${errorStatement}`,
237
237
  )
238
238
  }
239
239
 
package/src/index.ts CHANGED
@@ -41,7 +41,7 @@ export {
41
41
  relativePath,
42
42
  } from './file-helpers.js'
43
43
 
44
- export { formatCommand } from './utils.js'
44
+ export { formatCommand, handleSpecialURL } from './utils.js'
45
45
 
46
46
  export { initStarter, compileStarter } from './custom-add-ons/starter.js'
47
47
  export { initAddOn, compileAddOn } from './custom-add-ons/add-on.js'
package/src/registry.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { z } from 'zod'
2
2
  import { loadRemoteAddOn } from './custom-add-ons/add-on.js'
3
3
  import { loadStarter } from './custom-add-ons/starter.js'
4
+ import { handleSpecialURL } from './utils.js'
4
5
 
5
6
  import type { AddOn, Starter } from './types'
6
7
 
@@ -45,15 +46,16 @@ export async function getRawRegistry(
45
46
  ): Promise<Registry | undefined> {
46
47
  const regUrl = registryUrl || process.env.CTA_REGISTRY
47
48
  if (regUrl) {
48
- const registry = (await fetch(regUrl).then((res) => res.json())) as Registry
49
+ const url = handleSpecialURL(regUrl)
50
+ const registry = (await fetch(url).then((res) => res.json())) as Registry
49
51
  const parsedRegistry = registrySchema.parse(registry)
50
52
  for (const addOn of parsedRegistry['add-ons'] || []) {
51
- addOn.url = absolutizeUrl(regUrl, addOn.url)
53
+ addOn.url = absolutizeUrl(url, addOn.url)
52
54
  }
53
55
  for (const starter of parsedRegistry.starters || []) {
54
- starter.url = absolutizeUrl(regUrl, starter.url)
56
+ starter.url = absolutizeUrl(url, starter.url)
55
57
  if (starter.banner) {
56
- starter.banner = absolutizeUrl(regUrl, starter.banner)
58
+ starter.banner = absolutizeUrl(url, starter.banner)
57
59
  }
58
60
  }
59
61
  return parsedRegistry
package/src/utils.ts CHANGED
@@ -25,3 +25,18 @@ export function formatCommand({
25
25
  }) {
26
26
  return `${command} ${args.join(' ')}`.trim()
27
27
  }
28
+
29
+ // Turn GitHub URLs into raw URLs
30
+ export function handleSpecialURL(url: string) {
31
+ if (url.startsWith('https://github.com/') && url.includes('blob')) {
32
+ return url
33
+ .replace('https://github.com/', 'https://raw.githubusercontent.com/')
34
+ .replace('/blob/', '/refs/heads/')
35
+ }
36
+ if (url.startsWith('https://github.com/') && url.includes('tree')) {
37
+ return url
38
+ .replace('https://github.com/', 'https://raw.githubusercontent.com/')
39
+ .replace('/tree/', '/refs/heads/')
40
+ }
41
+ return url
42
+ }
@@ -1,6 +1,11 @@
1
1
  import { describe, expect, it } from 'vitest'
2
2
 
3
- import { formatCommand, jsSafeName, sortObject } from '../src/utils.js'
3
+ import {
4
+ formatCommand,
5
+ handleSpecialURL,
6
+ jsSafeName,
7
+ sortObject,
8
+ } from '../src/utils.js'
4
9
 
5
10
  describe('formatCommand', () => {
6
11
  it('should format a command', () => {
@@ -21,3 +26,23 @@ describe('sortObject', () => {
21
26
  expect(sortObject({ b: 'b', a: 'a' })).toEqual({ a: 'a', b: 'b' })
22
27
  })
23
28
  })
29
+
30
+ describe('handleSpecialURL', () => {
31
+ it('should handle special URLs', () => {
32
+ expect(
33
+ handleSpecialURL(
34
+ 'https://github.com/TanStack/create-tsrouter-app/blob/main/examples/react-cra/registry.json',
35
+ ),
36
+ ).toEqual(
37
+ 'https://raw.githubusercontent.com/TanStack/create-tsrouter-app/refs/heads/main/examples/react-cra/registry.json',
38
+ )
39
+
40
+ expect(
41
+ handleSpecialURL(
42
+ 'https://github.com/TanStack/create-tsrouter-app/tree/alpha/packages/cta-cli/tsconfig.json',
43
+ ),
44
+ ).toEqual(
45
+ 'https://raw.githubusercontent.com/TanStack/create-tsrouter-app/refs/heads/alpha/packages/cta-cli/tsconfig.json',
46
+ )
47
+ })
48
+ })