@linktr.ee/linkapp 0.0.9 → 0.0.10

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 (46) hide show
  1. package/dev-server/classic/main.tsx +32 -15
  2. package/dev-server/components/ui/dialog.tsx +19 -42
  3. package/dev-server/components/ui/tabs.tsx +6 -6
  4. package/dev-server/featured/main.tsx +32 -15
  5. package/dev-server/lib/utils.ts +2 -2
  6. package/dev-server/preview/Preview.tsx +13 -11
  7. package/dev-server/vite.config.ts +11 -11
  8. package/dist/cli.js +4 -12
  9. package/dist/cli.js.map +1 -1
  10. package/dist/commands/add.d.ts.map +1 -1
  11. package/dist/commands/add.js.map +1 -1
  12. package/dist/commands/dev.d.ts.map +1 -1
  13. package/dist/commands/dev.js +15 -1
  14. package/dist/commands/dev.js.map +1 -1
  15. package/dist/commands/login.d.ts.map +1 -1
  16. package/dist/commands/login.js.map +1 -1
  17. package/dist/lib/build/detect-layouts.d.ts +2 -2
  18. package/dist/lib/build/detect-layouts.d.ts.map +1 -1
  19. package/dist/lib/build/detect-layouts.js +13 -21
  20. package/dist/lib/build/detect-layouts.js.map +1 -1
  21. package/dist/lib/config/load-config.d.ts +9 -0
  22. package/dist/lib/config/load-config.d.ts.map +1 -0
  23. package/dist/lib/config/load-config.js +31 -0
  24. package/dist/lib/config/load-config.js.map +1 -0
  25. package/dist/lib/deploy/generate-manifest-files.d.ts.map +1 -1
  26. package/dist/lib/deploy/generate-manifest-files.js +14 -35
  27. package/dist/lib/deploy/generate-manifest-files.js.map +1 -1
  28. package/dist/lib/deploy/upload.js +5 -5
  29. package/dist/lib/utils/setup-runtime.d.ts.map +1 -1
  30. package/dist/lib/utils/setup-runtime.js +2 -6
  31. package/dist/lib/utils/setup-runtime.js.map +1 -1
  32. package/dist/lib/vite/config-factory.d.ts.map +1 -1
  33. package/dist/lib/vite/config-factory.js +2 -2
  34. package/dist/lib/vite/config-factory.js.map +1 -1
  35. package/dist/lib/vite/plugins/asset-versioning.d.ts.map +1 -1
  36. package/dist/lib/vite/plugins/asset-versioning.js +4 -2
  37. package/dist/lib/vite/plugins/asset-versioning.js.map +1 -1
  38. package/dist/schema/config.schema.d.ts +125 -34
  39. package/dist/schema/config.schema.d.ts.map +1 -1
  40. package/dist/schema/config.schema.js +58 -14
  41. package/dist/schema/config.schema.js.map +1 -1
  42. package/dist/types.d.ts +23 -9
  43. package/dist/types.d.ts.map +1 -1
  44. package/dist/types.js +4 -0
  45. package/dist/types.js.map +1 -1
  46. package/package.json +1 -1
@@ -0,0 +1,31 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { createJiti } from 'jiti';
4
+ /**
5
+ * Loads the LinkApp configuration from the user's project
6
+ * @param projectPath - Path to the user's project (defaults to cwd)
7
+ * @returns The loaded configuration
8
+ * @throws Error if config file is not found or cannot be loaded
9
+ */
10
+ export function loadConfig(projectPath = process.cwd()) {
11
+ // Check for config in root first, then .config directory
12
+ const rootConfigPath = join(projectPath, 'linkapp.config.ts');
13
+ const nestedConfigPath = join(projectPath, '.config', 'linkapp.config.ts');
14
+ const configPath = existsSync(rootConfigPath) ? rootConfigPath : nestedConfigPath;
15
+ if (!existsSync(configPath)) {
16
+ throw new Error('Config file not found: linkapp.config.ts');
17
+ }
18
+ try {
19
+ // Load the TypeScript config using jiti
20
+ const jiti = createJiti(import.meta.url, {
21
+ interopDefault: true,
22
+ moduleCache: false,
23
+ });
24
+ const config = jiti(configPath);
25
+ return config;
26
+ }
27
+ catch (error) {
28
+ throw new Error(`Failed to load config: ${error instanceof Error ? error.message : error}`);
29
+ }
30
+ }
31
+ //# sourceMappingURL=load-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-config.js","sourceRoot":"","sources":["../../../src/lib/config/load-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AAGjC;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,cAAsB,OAAO,CAAC,GAAG,EAAE;IAC5D,yDAAyD;IACzD,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAA;IAC7D,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAA;IAC1E,MAAM,UAAU,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB,CAAA;IAEjF,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;IAC7D,CAAC;IAED,IAAI,CAAC;QACH,wCAAwC;QACxC,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YACvC,cAAc,EAAE,IAAI;YACpB,WAAW,EAAE,KAAK;SACnB,CAAC,CAAA;QACF,MAAM,MAAM,GAAkB,IAAI,CAAC,UAAU,CAAC,CAAA;QAC9C,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;IAC7F,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"generate-manifest-files.d.ts","sourceRoot":"","sources":["../../../src/lib/deploy/generate-manifest-files.ts"],"names":[],"mappings":"AAmCA,wBAAsB,qBAAqB,CAAC,WAAW,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuE9F"}
1
+ {"version":3,"file":"generate-manifest-files.d.ts","sourceRoot":"","sources":["../../../src/lib/deploy/generate-manifest-files.ts"],"names":[],"mappings":"AAMA,wBAAsB,qBAAqB,CAAC,WAAW,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8D9F"}
@@ -1,31 +1,7 @@
1
1
  import { writeFileSync, existsSync, mkdirSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  import { createJiti } from 'jiti';
4
- /**
5
- * Convert camelCase string to snake_case
6
- */
7
- function toSnakeCase(str) {
8
- return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
9
- }
10
- /**
11
- * Recursively convert all camelCase keys to snake_case in an object
12
- */
13
- function convertKeysToSnakeCase(obj) {
14
- if (obj === null || obj === undefined) {
15
- return obj;
16
- }
17
- if (Array.isArray(obj)) {
18
- return obj.map(item => convertKeysToSnakeCase(item));
19
- }
20
- if (typeof obj === 'object' && obj.constructor === Object) {
21
- return Object.keys(obj).reduce((acc, key) => {
22
- const snakeKey = toSnakeCase(key);
23
- acc[snakeKey] = convertKeysToSnakeCase(obj[key]);
24
- return acc;
25
- }, {});
26
- }
27
- return obj;
28
- }
4
+ import { detectLayouts } from '../build/detect-layouts.js';
29
5
  export async function generateManifestFiles(projectPath = process.cwd()) {
30
6
  // Check for config in root first, then .config directory
31
7
  const rootConfigPath = join(projectPath, 'linkapp.config.ts');
@@ -46,32 +22,35 @@ export async function generateManifestFiles(projectPath = process.cwd()) {
46
22
  moduleCache: false,
47
23
  });
48
24
  const config = jiti(configPath);
49
- // Generate manifest.json (convert all camelCase keys to snake_case for API)
25
+ // Generate manifest.json
50
26
  // Note: id is kept in config for internal use but NOT sent to the API
51
- const manifestData = {
27
+ const manifest = {
52
28
  name: config.manifest.name,
53
29
  tagline: config.manifest.tagline,
54
30
  description: config.manifest.description,
55
- manifestVersion: config.manifest.manifestVersion,
31
+ manifest_version: config.manifest.manifest_version,
56
32
  version: config.manifest.version,
57
- supportingLinks: config.manifest.supportingLinks,
33
+ supporting_links: config.manifest.supporting_links,
58
34
  category: config.manifest.category,
59
- searchTerms: config.manifest.searchTerms,
35
+ search_terms: config.manifest.search_terms,
60
36
  author: config.manifest.author,
61
37
  };
62
- const manifest = convertKeysToSnakeCase(manifestData);
63
38
  writeFileSync(join(linkappDir, 'manifest.json'), JSON.stringify(manifest, null, 2), 'utf-8');
64
- // Generate settings.json (keep camelCase - API expects camelCase for settings)
65
- // Note: supportsFeaturedLayout is kept in config but NOT sent to the API
39
+ // Auto-detect featured layout support based on app/featured.tsx presence
40
+ const layoutDetection = detectLayouts(projectPath);
41
+ const hasFeaturedLayout = layoutDetection.layouts.some(layout => layout.name === 'featured');
42
+ // Generate settings.json
66
43
  const settings = {
67
44
  title: config.settings.title,
68
45
  overview: config.settings.overview,
69
46
  elements: config.settings.elements,
47
+ // Auto-detected: true if app/featured.tsx exists, false otherwise
48
+ supports_featured_layout: hasFeaturedLayout,
70
49
  };
71
50
  writeFileSync(join(linkappDir, 'settings.json'), JSON.stringify(settings, null, 2), 'utf-8');
72
51
  // Generate url_match_rules.json if present
73
- if (config.urlMatchRules) {
74
- writeFileSync(join(linkappDir, 'url_match_rules.json'), JSON.stringify(config.urlMatchRules, null, 2), 'utf-8');
52
+ if (config.url_match_rules) {
53
+ writeFileSync(join(linkappDir, 'url_match_rules.json'), JSON.stringify(config.url_match_rules, null, 2), 'utf-8');
75
54
  }
76
55
  }
77
56
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"generate-manifest-files.js","sourceRoot":"","sources":["../../../src/lib/deploy/generate-manifest-files.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate-manifest-files.js","sourceRoot":"","sources":["../../../src/lib/deploy/generate-manifest-files.ts"],"names":[],"mappings":"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"}
@@ -21,29 +21,29 @@ export async function uploadAssets(options) {
21
21
  // Add required files with correct content types
22
22
  form.append('package', createReadStream(packagePath), {
23
23
  contentType: 'application/gzip',
24
- filename: 'package.tgz'
24
+ filename: 'package.tgz',
25
25
  });
26
26
  form.append('manifest', createReadStream(manifestPath), {
27
27
  contentType: 'application/json',
28
- filename: 'manifest.json'
28
+ filename: 'manifest.json',
29
29
  });
30
30
  // Add optional files
31
31
  if (existsSync(settingsPath)) {
32
32
  form.append('settings', createReadStream(settingsPath), {
33
33
  contentType: 'application/json',
34
- filename: 'settings.json'
34
+ filename: 'settings.json',
35
35
  });
36
36
  }
37
37
  if (existsSync(urlMatchRulesPath)) {
38
38
  form.append('url_match_rules', createReadStream(urlMatchRulesPath), {
39
39
  contentType: 'application/json',
40
- filename: 'url_match_rules.json'
40
+ filename: 'url_match_rules.json',
41
41
  });
42
42
  }
43
43
  if (existsSync(iconPath)) {
44
44
  form.append('icon', createReadStream(iconPath), {
45
45
  contentType: 'image/svg+xml',
46
- filename: 'icon.svg'
46
+ filename: 'icon.svg',
47
47
  });
48
48
  }
49
49
  const headers = {
@@ -1 +1 @@
1
- {"version":3,"file":"setup-runtime.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/setup-runtime.ts"],"names":[],"mappings":"AAgFA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAyBtD"}
1
+ {"version":3,"file":"setup-runtime.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/setup-runtime.ts"],"names":[],"mappings":"AA4EA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAyBtD"}
@@ -11,13 +11,9 @@ function generateMainTsx(projectPath) {
11
11
  const detection = detectLayouts(projectPath);
12
12
  const layouts = detection.layouts;
13
13
  // Generate import statements for each layout
14
- const imports = layouts
15
- .map(layout => `import ${layout.displayName} from '../app/${layout.fileName}'`)
16
- .join('\n');
14
+ const imports = layouts.map((layout) => `import ${layout.displayName} from '../app/${layout.fileName}'`).join('\n');
17
15
  // Generate layouts object
18
- const layoutsObj = layouts
19
- .map(layout => ` ${layout.name}: ${layout.displayName},`)
20
- .join('\n');
16
+ const layoutsObj = layouts.map((layout) => ` ${layout.name}: ${layout.displayName},`).join('\n');
21
17
  return `import { StrictMode } from 'react'
22
18
  import { createRoot } from 'react-dom/client'
23
19
  import Layout from '../app/layout.tsx'
@@ -1 +1 @@
1
- {"version":3,"file":"setup-runtime.js","sourceRoot":"","sources":["../../../src/lib/utils/setup-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE1D,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AAErC;;GAEG;AACH,SAAS,eAAe,CAAC,WAAmB;IAC1C,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,CAAA;IAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAA;IAEjC,6CAA6C;IAC7C,MAAM,OAAO,GAAG,OAAO;SACpB,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,MAAM,CAAC,WAAW,iBAAiB,MAAM,CAAC,QAAQ,GAAG,CAAC;SAC9E,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb,0BAA0B;IAC1B,MAAM,UAAU,GAAG,OAAO;SACvB,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,WAAW,GAAG,CAAC;SACzD,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb,OAAO;;;EAGP,OAAO;;;;;EAKP,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4CX,CAAA;AACD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;QAChD,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAA;QAErE,gDAAgD;QAChD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5C,CAAC;QAED,kBAAkB;QAClB,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAA;QAC1D,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,2BAA2B,aAAa,EAAE,CAAC,CAAA;QAC7D,CAAC;QACD,MAAM,SAAS,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QACtD,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;QAEjE,oEAAoE;QACpE,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC,CAAA;QAC5C,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC/D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAA;QACtD,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"setup-runtime.js","sourceRoot":"","sources":["../../../src/lib/utils/setup-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE1D,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AAErC;;GAEG;AACH,SAAS,eAAe,CAAC,WAAmB;IAC1C,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,CAAA;IAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAA;IAEjC,6CAA6C;IAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,MAAM,CAAC,WAAW,iBAAiB,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEnH,0BAA0B;IAC1B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEjG,OAAO;;;EAGP,OAAO;;;;;EAKP,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4CX,CAAA;AACD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;QAChD,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAA;QAErE,gDAAgD;QAChD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5C,CAAC;QAED,kBAAkB;QAClB,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAA;QAC1D,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,2BAA2B,aAAa,EAAE,CAAC,CAAA;QAC7D,CAAC;QACD,MAAM,SAAS,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QACtD,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;QAEjE,oEAAoE;QACpE,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC,CAAA;QAC5C,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC/D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAA;QACtD,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config-factory.d.ts","sourceRoot":"","sources":["../../../src/lib/vite/config-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAMxC,UAAU,iBAAiB;IACzB,IAAI,EAAE,aAAa,GAAG,YAAY,CAAA;IAClC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,YAAY,CAgEzE"}
1
+ {"version":3,"file":"config-factory.d.ts","sourceRoot":"","sources":["../../../src/lib/vite/config-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAMxC,UAAU,iBAAiB;IACzB,IAAI,EAAE,aAAa,GAAG,YAAY,CAAA;IAClC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,YAAY,CA2DzE"}
@@ -3,7 +3,7 @@ import { resolve, join } from 'node:path';
3
3
  import { assetVersioning } from './plugins/asset-versioning.js';
4
4
  import { setupRuntime } from '../utils/setup-runtime.js';
5
5
  export function createViteConfig(options) {
6
- const { mode, port = 3000, host = 'localhost', open = false, sourcemap = false, profile = false, } = options;
6
+ const { mode, port = 3000, host = 'localhost', open = false, sourcemap = false, profile = false } = options;
7
7
  const isDev = mode === 'development';
8
8
  const projectRoot = process.cwd();
9
9
  // Setup runtime files in user's project
@@ -14,7 +14,7 @@ export function createViteConfig(options) {
14
14
  plugins: [react()],
15
15
  resolve: {
16
16
  alias: {
17
- '@': resolve(projectRoot, 'src'),
17
+ '@': resolve(projectRoot),
18
18
  },
19
19
  },
20
20
  build: {
@@ -1 +1 @@
1
- {"version":3,"file":"config-factory.js","sourceRoot":"","sources":["../../../src/lib/vite/config-factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,sBAAsB,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAWxD,MAAM,UAAU,gBAAgB,CAAC,OAA0B;IACzD,MAAM,EACJ,IAAI,EACJ,IAAI,GAAG,IAAI,EACX,IAAI,GAAG,WAAW,EAClB,IAAI,GAAG,KAAK,EACZ,SAAS,GAAG,KAAK,EACjB,OAAO,GAAG,KAAK,GAChB,GAAG,OAAO,CAAA;IAEX,MAAM,KAAK,GAAG,IAAI,KAAK,aAAa,CAAA;IACpC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IAEjC,wCAAwC;IACxC,YAAY,CAAC,WAAW,CAAC,CAAA;IAEzB,MAAM,MAAM,GAAiB;QAC3B,IAAI;QACJ,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,EAAE;YACP,KAAK,EAAE;gBACL,GAAG,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC;aACjC;SACF;QACD,KAAK,EAAE;YACL,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;YACvC,MAAM,EAAE,CAAC,KAAK;YACd,aAAa,EAAE;gBACb,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,YAAY,CAAC;gBAClD,MAAM,EAAE;oBACN,cAAc,EAAE,kBAAkB;oBAClC,cAAc,EAAE,kBAAkB;oBAClC,cAAc,EAAE,qBAAqB;iBACtC;aACF;SACF;QACD,MAAM,EAAE;YACN,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,KAAK;SAClB;KACF,CAAA;IAED,8BAA8B;IAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,CAAC,OAAO,EAAE,IAAI,CAClB,eAAe,CAAC;YACd,YAAY,EAAE,qBAAqB;SACpC,CAAC,CACH,CAAA;QAED,mCAAmC;QACnC,IAAI,OAAO,EAAE,CAAC;YACZ,uEAAuE;YACvE,kFAAkF;YAClF,OAAO,CAAC,IAAI,CAAC,8GAA8G,CAAC,CAAA;QAC9H,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"config-factory.js","sourceRoot":"","sources":["../../../src/lib/vite/config-factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,sBAAsB,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAWxD,MAAM,UAAU,gBAAgB,CAAC,OAA0B;IACzD,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,WAAW,EAAE,IAAI,GAAG,KAAK,EAAE,SAAS,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,OAAO,CAAA;IAE3G,MAAM,KAAK,GAAG,IAAI,KAAK,aAAa,CAAA;IACpC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IAEjC,wCAAwC;IACxC,YAAY,CAAC,WAAW,CAAC,CAAA;IAEzB,MAAM,MAAM,GAAiB;QAC3B,IAAI;QACJ,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,EAAE;YACP,KAAK,EAAE;gBACL,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC;aAC1B;SACF;QACD,KAAK,EAAE;YACL,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;YACvC,MAAM,EAAE,CAAC,KAAK;YACd,aAAa,EAAE;gBACb,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,YAAY,CAAC;gBAClD,MAAM,EAAE;oBACN,cAAc,EAAE,kBAAkB;oBAClC,cAAc,EAAE,kBAAkB;oBAClC,cAAc,EAAE,qBAAqB;iBACtC;aACF;SACF;QACD,MAAM,EAAE;YACN,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,KAAK;SAClB;KACF,CAAA;IAED,8BAA8B;IAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,CAAC,OAAO,EAAE,IAAI,CAClB,eAAe,CAAC;YACd,YAAY,EAAE,qBAAqB;SACpC,CAAC,CACH,CAAA;QAED,mCAAmC;QACnC,IAAI,OAAO,EAAE,CAAC;YACZ,uEAAuE;YACvE,kFAAkF;YAClF,OAAO,CAAC,IAAI,CACV,8GAA8G,CAC/G,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"asset-versioning.d.ts","sourceRoot":"","sources":["../../../../src/lib/vite/plugins/asset-versioning.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAKlC,UAAU,sBAAsB;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,sBAA2B,GAAG,MAAM,CA+C5E"}
1
+ {"version":3,"file":"asset-versioning.d.ts","sourceRoot":"","sources":["../../../../src/lib/vite/plugins/asset-versioning.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAKlC,UAAU,sBAAsB;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,sBAA2B,GAAG,MAAM,CAiD5E"}
@@ -1,6 +1,6 @@
1
1
  import { createHash } from 'node:crypto';
2
- import { writeFileSync } from 'node:fs';
3
- import { join } from 'node:path';
2
+ import { writeFileSync, mkdirSync } from 'node:fs';
3
+ import { join, dirname } from 'node:path';
4
4
  /**
5
5
  * Vite plugin that creates a build manifest with versioned assets
6
6
  * This helps invalidate cache on deployment
@@ -39,6 +39,8 @@ export function assetVersioning(options = {}) {
39
39
  const outDir = process.env.VITE_OUT_DIR || 'dist';
40
40
  const fullPath = join(process.cwd(), outDir, manifestPath);
41
41
  try {
42
+ // Ensure the output directory exists
43
+ mkdirSync(dirname(fullPath), { recursive: true });
42
44
  writeFileSync(fullPath, JSON.stringify(manifest, null, 2));
43
45
  }
44
46
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"asset-versioning.js","sourceRoot":"","sources":["../../../../src/lib/vite/plugins/asset-versioning.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAMhC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkC,EAAE;IAClE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,qBAAqB,CAAA;IAClE,MAAM,QAAQ,GAA2B,EAAE,CAAA;IAE3C,OAAO;QACL,IAAI,EAAE,0BAA0B;QAChC,OAAO,EAAE,MAAM;QAEf,cAAc,CAAC,QAAQ,EAAE,MAAM;YAC7B,6BAA6B;YAC7B,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBACrD,6CAA6C;oBAC7C,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAA;oBAC3D,QAAQ,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAA;oBAEjC,eAAe;oBACf,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;wBAC5C,QAAQ,CAAC,GAAG,YAAY,QAAQ,CAAC,GAAG,MAAM,CAAA;oBAC5C,CAAC;gBACH,CAAC;YACH,CAAC;YAED,sBAAsB;YACtB,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;YACjD,QAAQ,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAExG,qBAAqB;YACrB,IAAI,CAAC,QAAQ,CAAC;gBACZ,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;aAC1C,CAAC,CAAA;QACJ,CAAC;QAED,WAAW;YACT,qDAAqD;YACrD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,CAAA;YACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,CAAA;YAE1D,IAAI,CAAC;gBACH,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YAC5D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAA;YACxD,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"asset-versioning.js","sourceRoot":"","sources":["../../../../src/lib/vite/plugins/asset-versioning.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMzC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkC,EAAE;IAClE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,qBAAqB,CAAA;IAClE,MAAM,QAAQ,GAA2B,EAAE,CAAA;IAE3C,OAAO;QACL,IAAI,EAAE,0BAA0B;QAChC,OAAO,EAAE,MAAM;QAEf,cAAc,CAAC,QAAQ,EAAE,MAAM;YAC7B,6BAA6B;YAC7B,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBACrD,6CAA6C;oBAC7C,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAA;oBAC3D,QAAQ,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAA;oBAEjC,eAAe;oBACf,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;wBAC5C,QAAQ,CAAC,GAAG,YAAY,QAAQ,CAAC,GAAG,MAAM,CAAA;oBAC5C,CAAC;gBACH,CAAC;YACH,CAAC;YAED,sBAAsB;YACtB,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;YACjD,QAAQ,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAExG,qBAAqB;YACrB,IAAI,CAAC,QAAQ,CAAC;gBACZ,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;aAC1C,CAAC,CAAA;QACJ,CAAC;QAED,WAAW;YACT,qDAAqD;YACrD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,CAAA;YACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,CAAA;YAE1D,IAAI,CAAC;gBACH,qCAAqC;gBACrC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;gBACjD,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YAC5D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAA;YACxD,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -3,11 +3,11 @@ declare const manifestSchema: z.ZodObject<{
3
3
  name: z.ZodString;
4
4
  tagline: z.ZodString;
5
5
  description: z.ZodArray<z.ZodString>;
6
- manifestVersion: z.ZodString;
6
+ manifest_version: z.ZodString;
7
7
  version: z.ZodString;
8
- supportingLinks: z.ZodObject<{
9
- termsOfService: z.ZodString;
10
- privacyPolicy: z.ZodString;
8
+ supporting_links: z.ZodObject<{
9
+ terms_of_service: z.ZodString;
10
+ privacy_policy: z.ZodString;
11
11
  documentation: z.ZodOptional<z.ZodString>;
12
12
  website: z.ZodOptional<z.ZodString>;
13
13
  }, z.core.$strip>;
@@ -15,9 +15,9 @@ declare const manifestSchema: z.ZodObject<{
15
15
  grow: "grow";
16
16
  sell: "sell";
17
17
  share: "share";
18
- other: "other";
18
+ learn: "learn";
19
19
  }>;
20
- searchTerms: z.ZodArray<z.ZodString>;
20
+ search_terms: z.ZodArray<z.ZodString>;
21
21
  author: z.ZodObject<{
22
22
  name: z.ZodString;
23
23
  accounts: z.ZodArray<z.ZodString>;
@@ -31,47 +31,66 @@ declare const settingsElementSchema: z.ZodObject<{
31
31
  id: z.ZodString;
32
32
  inputType: z.ZodEnum<{
33
33
  number: "number";
34
+ array: "array";
35
+ url: "url";
34
36
  text: "text";
35
37
  switch: "switch";
36
38
  select: "select";
37
- color: "color";
39
+ checkbox: "checkbox";
40
+ linkBehavior: "linkBehavior";
38
41
  textarea: "textarea";
39
42
  }>;
40
- title: z.ZodString;
43
+ title: z.ZodOptional<z.ZodString>;
41
44
  description: z.ZodOptional<z.ZodString>;
42
45
  defaultValue: z.ZodOptional<z.ZodUnknown>;
43
46
  label: z.ZodOptional<z.ZodString>;
47
+ placeholder: z.ZodOptional<z.ZodString>;
48
+ validation: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
44
49
  options: z.ZodOptional<z.ZodArray<z.ZodObject<{
45
50
  label: z.ZodString;
46
51
  value: z.ZodUnknown;
47
52
  }, z.core.$strip>>>;
48
- }, z.core.$strip>;
53
+ linkBehaviorLabels: z.ZodOptional<z.ZodObject<{
54
+ embedLabel: z.ZodString;
55
+ linkOffLabel: z.ZodString;
56
+ }, z.core.$strip>>;
57
+ }, z.core.$loose>;
49
58
  declare const settingsSchema: z.ZodObject<{
50
59
  title: z.ZodString;
51
60
  overview: z.ZodObject<{
52
61
  title: z.ZodString;
53
62
  description: z.ZodString;
54
- supportLink: z.ZodString;
63
+ support_link: z.ZodString;
55
64
  }, z.core.$strip>;
56
65
  elements: z.ZodArray<z.ZodObject<{
57
66
  id: z.ZodString;
58
67
  inputType: z.ZodEnum<{
59
68
  number: "number";
69
+ array: "array";
70
+ url: "url";
60
71
  text: "text";
61
72
  switch: "switch";
62
73
  select: "select";
63
- color: "color";
74
+ checkbox: "checkbox";
75
+ linkBehavior: "linkBehavior";
64
76
  textarea: "textarea";
65
77
  }>;
66
- title: z.ZodString;
78
+ title: z.ZodOptional<z.ZodString>;
67
79
  description: z.ZodOptional<z.ZodString>;
68
80
  defaultValue: z.ZodOptional<z.ZodUnknown>;
69
81
  label: z.ZodOptional<z.ZodString>;
82
+ placeholder: z.ZodOptional<z.ZodString>;
83
+ validation: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
70
84
  options: z.ZodOptional<z.ZodArray<z.ZodObject<{
71
85
  label: z.ZodString;
72
86
  value: z.ZodUnknown;
73
87
  }, z.core.$strip>>>;
74
- }, z.core.$strip>>;
88
+ linkBehaviorLabels: z.ZodOptional<z.ZodObject<{
89
+ embedLabel: z.ZodString;
90
+ linkOffLabel: z.ZodString;
91
+ }, z.core.$strip>>;
92
+ }, z.core.$loose>>;
93
+ supports_featured_layout: z.ZodOptional<z.ZodBoolean>;
75
94
  }, z.core.$strip>;
76
95
  declare const urlMatchRulesSchema: z.ZodObject<{
77
96
  hostnames: z.ZodArray<z.ZodString>;
@@ -88,11 +107,11 @@ export declare const linkAppConfigSchema: z.ZodObject<{
88
107
  name: z.ZodString;
89
108
  tagline: z.ZodString;
90
109
  description: z.ZodArray<z.ZodString>;
91
- manifestVersion: z.ZodString;
110
+ manifest_version: z.ZodString;
92
111
  version: z.ZodString;
93
- supportingLinks: z.ZodObject<{
94
- termsOfService: z.ZodString;
95
- privacyPolicy: z.ZodString;
112
+ supporting_links: z.ZodObject<{
113
+ terms_of_service: z.ZodString;
114
+ privacy_policy: z.ZodString;
96
115
  documentation: z.ZodOptional<z.ZodString>;
97
116
  website: z.ZodOptional<z.ZodString>;
98
117
  }, z.core.$strip>;
@@ -100,9 +119,9 @@ export declare const linkAppConfigSchema: z.ZodObject<{
100
119
  grow: "grow";
101
120
  sell: "sell";
102
121
  share: "share";
103
- other: "other";
122
+ learn: "learn";
104
123
  }>;
105
- searchTerms: z.ZodArray<z.ZodString>;
124
+ search_terms: z.ZodArray<z.ZodString>;
106
125
  author: z.ZodObject<{
107
126
  name: z.ZodString;
108
127
  accounts: z.ZodArray<z.ZodString>;
@@ -117,29 +136,39 @@ export declare const linkAppConfigSchema: z.ZodObject<{
117
136
  overview: z.ZodObject<{
118
137
  title: z.ZodString;
119
138
  description: z.ZodString;
120
- supportLink: z.ZodString;
139
+ support_link: z.ZodString;
121
140
  }, z.core.$strip>;
122
141
  elements: z.ZodArray<z.ZodObject<{
123
142
  id: z.ZodString;
124
143
  inputType: z.ZodEnum<{
125
144
  number: "number";
145
+ array: "array";
146
+ url: "url";
126
147
  text: "text";
127
148
  switch: "switch";
128
149
  select: "select";
129
- color: "color";
150
+ checkbox: "checkbox";
151
+ linkBehavior: "linkBehavior";
130
152
  textarea: "textarea";
131
153
  }>;
132
- title: z.ZodString;
154
+ title: z.ZodOptional<z.ZodString>;
133
155
  description: z.ZodOptional<z.ZodString>;
134
156
  defaultValue: z.ZodOptional<z.ZodUnknown>;
135
157
  label: z.ZodOptional<z.ZodString>;
158
+ placeholder: z.ZodOptional<z.ZodString>;
159
+ validation: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
136
160
  options: z.ZodOptional<z.ZodArray<z.ZodObject<{
137
161
  label: z.ZodString;
138
162
  value: z.ZodUnknown;
139
163
  }, z.core.$strip>>>;
140
- }, z.core.$strip>>;
164
+ linkBehaviorLabels: z.ZodOptional<z.ZodObject<{
165
+ embedLabel: z.ZodString;
166
+ linkOffLabel: z.ZodString;
167
+ }, z.core.$strip>>;
168
+ }, z.core.$loose>>;
169
+ supports_featured_layout: z.ZodOptional<z.ZodBoolean>;
141
170
  }, z.core.$strip>;
142
- urlMatchRules: z.ZodOptional<z.ZodObject<{
171
+ url_match_rules: z.ZodOptional<z.ZodObject<{
143
172
  hostnames: z.ZodArray<z.ZodString>;
144
173
  patterns: z.ZodOptional<z.ZodArray<z.ZodObject<{
145
174
  pathname: z.ZodString;
@@ -148,6 +177,35 @@ export declare const linkAppConfigSchema: z.ZodObject<{
148
177
  pathname: z.ZodString;
149
178
  }, z.core.$strip>>>;
150
179
  }, z.core.$strip>>;
180
+ preview_props: z.ZodOptional<z.ZodObject<{
181
+ linkUrl: z.ZodString;
182
+ layout: z.ZodOptional<z.ZodEnum<{
183
+ featured: "featured";
184
+ stack: "stack";
185
+ grid: "grid";
186
+ carousel: "carousel";
187
+ }>>;
188
+ theme: z.ZodObject<{
189
+ textColor: z.ZodString;
190
+ backgroundColor: z.ZodString;
191
+ borderRadius: z.ZodString;
192
+ borderColor: z.ZodString;
193
+ isOutlineStyle: z.ZodBoolean;
194
+ contrastColor: z.ZodString;
195
+ textHoverColor: z.ZodString;
196
+ }, z.core.$strip>;
197
+ locale: z.ZodString;
198
+ currency: z.ZodString;
199
+ username: z.ZodString;
200
+ viewport: z.ZodObject<{
201
+ width: z.ZodNumber;
202
+ height: z.ZodNumber;
203
+ }, z.core.$strip>;
204
+ position: z.ZodOptional<z.ZodObject<{
205
+ latitude: z.ZodNumber;
206
+ longitude: z.ZodNumber;
207
+ }, z.core.$strip>>;
208
+ }, z.core.$catchall<z.ZodUnknown>>>;
151
209
  }, z.core.$strip>;
152
210
  export type LinkAppConfig = z.infer<typeof linkAppConfigSchema>;
153
211
  export type LinkAppManifest = z.infer<typeof manifestSchema>;
@@ -172,16 +230,16 @@ export declare function safeLyValidateLinkAppConfig(config: unknown): z.ZodSafeP
172
230
  name: string;
173
231
  tagline: string;
174
232
  description: string[];
175
- manifestVersion: string;
233
+ manifest_version: string;
176
234
  version: string;
177
- supportingLinks: {
178
- termsOfService: string;
179
- privacyPolicy: string;
235
+ supporting_links: {
236
+ terms_of_service: string;
237
+ privacy_policy: string;
180
238
  documentation?: string | undefined;
181
239
  website?: string | undefined;
182
240
  };
183
- category: "grow" | "sell" | "share" | "other";
184
- searchTerms: string[];
241
+ category: "grow" | "sell" | "share" | "learn";
242
+ search_terms: string[];
185
243
  author: {
186
244
  name: string;
187
245
  accounts: string[];
@@ -196,22 +254,30 @@ export declare function safeLyValidateLinkAppConfig(config: unknown): z.ZodSafeP
196
254
  overview: {
197
255
  title: string;
198
256
  description: string;
199
- supportLink: string;
257
+ support_link: string;
200
258
  };
201
259
  elements: {
260
+ [x: string]: unknown;
202
261
  id: string;
203
- inputType: "number" | "text" | "switch" | "select" | "color" | "textarea";
204
- title: string;
262
+ inputType: "number" | "array" | "url" | "text" | "switch" | "select" | "checkbox" | "linkBehavior" | "textarea";
263
+ title?: string | undefined;
205
264
  description?: string | undefined;
206
265
  defaultValue?: unknown;
207
266
  label?: string | undefined;
267
+ placeholder?: string | undefined;
268
+ validation?: Record<string, unknown> | undefined;
208
269
  options?: {
209
270
  label: string;
210
271
  value: unknown;
211
272
  }[] | undefined;
273
+ linkBehaviorLabels?: {
274
+ embedLabel: string;
275
+ linkOffLabel: string;
276
+ } | undefined;
212
277
  }[];
278
+ supports_featured_layout?: boolean | undefined;
213
279
  };
214
- urlMatchRules?: {
280
+ url_match_rules?: {
215
281
  hostnames: string[];
216
282
  patterns?: {
217
283
  pathname: string;
@@ -220,6 +286,31 @@ export declare function safeLyValidateLinkAppConfig(config: unknown): z.ZodSafeP
220
286
  pathname: string;
221
287
  }[] | undefined;
222
288
  } | undefined;
289
+ preview_props?: {
290
+ [x: string]: unknown;
291
+ linkUrl: string;
292
+ theme: {
293
+ textColor: string;
294
+ backgroundColor: string;
295
+ borderRadius: string;
296
+ borderColor: string;
297
+ isOutlineStyle: boolean;
298
+ contrastColor: string;
299
+ textHoverColor: string;
300
+ };
301
+ locale: string;
302
+ currency: string;
303
+ username: string;
304
+ viewport: {
305
+ width: number;
306
+ height: number;
307
+ };
308
+ layout?: "featured" | "stack" | "grid" | "carousel" | undefined;
309
+ position?: {
310
+ latitude: number;
311
+ longitude: number;
312
+ } | undefined;
313
+ } | undefined;
223
314
  }>;
224
315
  /**
225
316
  * Type guard to check if a value is a valid LinkAppConfig
@@ -1 +1 @@
1
- {"version":3,"file":"config.schema.d.ts","sourceRoot":"","sources":["../../src/schema/config.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AA8BvB,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqBlB,CAAA;AAGF,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;iBAQzB,CAAA;AAGF,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQlB,CAAA;AAGF,QAAA,MAAM,mBAAmB;;;;;;;;iBAgBvB,CAAA;AAGF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAS9B,CAAA;AAGF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAC5D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAC5D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEnE;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,aAAa,CAEpE;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAE1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE"}
1
+ {"version":3,"file":"config.schema.d.ts","sourceRoot":"","sources":["../../src/schema/config.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AA8BvB,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqBlB,CAAA;AAGF,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkBX,CAAA;AAGhB,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAUlB,CAAA;AAGF,QAAA,MAAM,mBAAmB;;;;;;;;iBAgBvB,CAAA;AAsCF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAU9B,CAAA;AAGF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAC5D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAC5D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEnE;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,aAAa,CAEpE;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAE1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE"}