@c15t/cli 1.3.3 → 1.3.4-canary-20250626090931

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.
@@ -1,5 +1,6 @@
1
1
  import type { CliLogger } from '../utils/logger';
2
2
  export type PackageManager = 'npm' | 'yarn' | 'pnpm';
3
+ export declare const SUPPORTED_PACKAGE_MANAGERS: PackageManager[];
3
4
  export interface PackageManagerResult {
4
5
  name: PackageManager;
5
6
  version: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-detection.d.ts","sourceRoot":"","sources":["../../src/context/package-manager-detection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AA0ID;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACzC,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,SAAS,GAChB,OAAO,CAAC,oBAAoB,CAAC,CAyC/B"}
1
+ {"version":3,"file":"package-manager-detection.d.ts","sourceRoot":"","sources":["../../src/context/package-manager-detection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AACrD,eAAO,MAAM,0BAA0B,EAAE,cAAc,EAItD,CAAC;AACF,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAoBD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACzC,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,SAAS,GAChB,OAAO,CAAC,oBAAoB,CAAC,CAqD/B"}
package/dist/index.mjs CHANGED
@@ -18,6 +18,7 @@ import * as __WEBPACK_EXTERNAL_MODULE__c15t_backend_pkgs_db_adapters_cee37d0f__
18
18
  import * as __WEBPACK_EXTERNAL_MODULE__c15t_backend_pkgs_migrations_80b6e3bd__ from "@c15t/backend/pkgs/migrations";
19
19
  import * as __WEBPACK_EXTERNAL_MODULE_figlet__ from "figlet";
20
20
  import * as __WEBPACK_EXTERNAL_MODULE_fs_extra_ce68a66b__ from "fs-extra";
21
+ import * as __WEBPACK_EXTERNAL_MODULE_package_manager_detector_detect_94d6a9ae__ from "package-manager-detector/detect";
21
22
  function isC15TOptions(obj) {
22
23
  return 'object' == typeof obj && null !== obj && 'appName' in obj;
23
24
  }
@@ -331,114 +332,6 @@ async function detectProjectRoot(cwd, logger) {
331
332
  return cwd;
332
333
  }
333
334
  }
334
- async function isValidProjectRoot(dir) {
335
- try {
336
- await __WEBPACK_EXTERNAL_MODULE_node_fs_promises_153e37e0__["default"].access(__WEBPACK_EXTERNAL_MODULE_node_path_c5b9b54f__["default"].join(dir, 'package.json'));
337
- const files = await __WEBPACK_EXTERNAL_MODULE_node_fs_promises_153e37e0__["default"].readdir(dir);
338
- return files.some((file)=>'node_modules' === file || 'package-lock.json' === file || 'yarn.lock' === file || 'pnpm-lock.yaml' === file);
339
- } catch {
340
- return false;
341
- }
342
- }
343
- async function detectPackageManagerInDirectory(dir, files, logger) {
344
- if (files.includes('pnpm-workspace.yaml')) {
345
- logger?.debug('Found pnpm workspace configuration');
346
- return {
347
- name: 'pnpm',
348
- version: await getPackageManagerVersion('pnpm')
349
- };
350
- }
351
- if (files.includes('yarn.lock') && await isValidProjectRoot(dir)) {
352
- logger?.debug('Found yarn.lock at root level');
353
- return {
354
- name: 'yarn',
355
- version: await getPackageManagerVersion('yarn')
356
- };
357
- }
358
- if (files.includes('package-lock.json') && await isValidProjectRoot(dir)) {
359
- logger?.debug('Found package-lock.json at root level');
360
- return {
361
- name: 'npm',
362
- version: await getPackageManagerVersion('npm')
363
- };
364
- }
365
- return null;
366
- }
367
- async function findPackageManager(startDir, logger) {
368
- logger?.debug(`Checking for package manager starting from ${startDir}`);
369
- if (!await isValidProjectRoot(startDir)) {
370
- logger?.debug(`${startDir} is not a valid project root, skipping detection`);
371
- return null;
372
- }
373
- let currentDir = startDir;
374
- let depth = 0;
375
- const maxDepth = 4;
376
- while(depth < maxDepth)try {
377
- logger?.debug(`Checking directory ${currentDir} for package manager files`);
378
- const files = await __WEBPACK_EXTERNAL_MODULE_node_fs_promises_153e37e0__["default"].readdir(currentDir);
379
- const packageManager = await detectPackageManagerInDirectory(currentDir, files, logger);
380
- if (packageManager) return packageManager;
381
- const parentDir = __WEBPACK_EXTERNAL_MODULE_node_path_c5b9b54f__["default"].dirname(currentDir);
382
- if (parentDir === currentDir) break;
383
- currentDir = parentDir;
384
- depth++;
385
- } catch (error) {
386
- logger?.debug(`Error checking directory ${currentDir}: ${error instanceof Error ? error.message : String(error)}`);
387
- break;
388
- }
389
- logger?.debug('No package manager found');
390
- return null;
391
- }
392
- async function getPackageManagerVersion(pm) {
393
- try {
394
- const { execSync } = await import("node:child_process");
395
- const version = execSync(`${pm} --version`).toString().trim();
396
- return version;
397
- } catch {
398
- return null;
399
- }
400
- }
401
- async function detectPackageManager(projectRoot, logger) {
402
- try {
403
- logger?.debug(`Detecting package manager in ${projectRoot}`);
404
- const packageManager = await findPackageManager(projectRoot, logger);
405
- if (packageManager) {
406
- logger?.debug(`Detected package manager: ${packageManager.name}`);
407
- return packageManager;
408
- }
409
- } catch (error) {
410
- logger?.error(`Error detecting package manager: ${error instanceof Error ? error.message : String(error)}`);
411
- }
412
- const selectedPackageManager = await __WEBPACK_EXTERNAL_MODULE__clack_prompts_3cae1695__.select({
413
- message: 'Please select your package manager:',
414
- options: [
415
- {
416
- value: 'npm',
417
- label: 'npm'
418
- },
419
- {
420
- value: 'yarn',
421
- label: 'yarn'
422
- },
423
- {
424
- value: 'pnpm',
425
- label: 'pnpm'
426
- }
427
- ],
428
- initialValue: 'npm'
429
- });
430
- if (__WEBPACK_EXTERNAL_MODULE__clack_prompts_3cae1695__.isCancel(selectedPackageManager)) {
431
- logger?.debug('Package manager selection cancelled by user');
432
- logger?.failed('Package manager selection cancelled. Exiting.');
433
- process.exit(0);
434
- }
435
- const version = await getPackageManagerVersion(selectedPackageManager);
436
- logger?.debug(`User selected package manager: ${selectedPackageManager} (version: ${version ?? 'unknown'})`);
437
- return {
438
- name: selectedPackageManager,
439
- version
440
- };
441
- }
442
335
  const TELEMETRY_DISABLED_ENV = 'C15T_TELEMETRY_DISABLED';
443
336
  const TelemetryEventName = {
444
337
  CLI_INVOKED: 'cli.invoked',
@@ -799,6 +692,8 @@ export const c15tConfig = {
799
692
  // Using hosted c15t (consent.io) or self-hosted instance
800
693
  mode: 'c15t',
801
694
  backendURL: ${useEnvFile ? 'process.env.NEXT_PUBLIC_C15T_URL' : `'${backendURL || 'https://your-instance.c15t.dev'}'`},
695
+ consentCategories: ['necessary', 'marketing'], // Optional: Specify which consent categories to show in the banner.
696
+ ignoreGeoLocation: true, // Useful for development to always view the banner.
802
697
 
803
698
  // Optional: Add callback functions for various events
804
699
  callbacks: {
@@ -809,7 +704,7 @@ export const c15tConfig = {
809
704
  } satisfies ConsentManagerOptions;
810
705
 
811
706
  // Use in your app layout:
812
- // <ConsentManagerProvider options={c15tConfig}>
707
+ // <ConsentManagerProvider {...c15tConfig}>
813
708
  // {children}
814
709
  // <CookieBanner />
815
710
  // <ConsentManagerDialog />
@@ -833,7 +728,7 @@ export const c15tConfig = {
833
728
  } satisfies ConsentManagerOptions;
834
729
 
835
730
  // Use in your app layout:
836
- // <ConsentManagerProvider options={c15tConfig}>
731
+ // <ConsentManagerProvider {...c15tConfig}>
837
732
  // {children}
838
733
  // <CookieBanner />
839
734
  // <ConsentManagerDialog />
@@ -859,7 +754,7 @@ export const c15tConfig = {
859
754
  } satisfies ConsentManagerOptions;
860
755
 
861
756
  // Use in your app layout:
862
- // <ConsentManagerProvider options={c15tConfig}>
757
+ // <ConsentManagerProvider {...c15tConfig}>
863
758
  // {children}
864
759
  // <CookieBanner />
865
760
  // <ConsentManagerDialog />
@@ -907,27 +802,34 @@ function findLayoutFile(project, projectRoot) {
907
802
  function generateOptionsText(mode, backendURL, useEnvFile, proxyNextjs) {
908
803
  switch(mode){
909
804
  case 'c15t':
910
- if (proxyNextjs) return `{
911
- mode: 'c15t',
912
- backendURL: '/api/c15t',
913
- }`;
914
- if (useEnvFile) return `{
915
- mode: 'c15t',
916
- backendURL: process.env.NEXT_PUBLIC_C15T_URL!,
917
- }`;
918
- return `{
919
- mode: 'c15t',
920
- backendURL: '${backendURL || 'https://your-instance.c15t.dev'}',
921
- }`;
805
+ if (proxyNextjs) return `
806
+ mode='c15t'
807
+ backendURL='/api/c15t'
808
+ consentCategories={['necessary', 'marketing']} // Optional: Specify which consent categories to show in the banner.
809
+ ignoreGeoLocation={true} // Useful for development to always view the banner.
810
+ `;
811
+ if (useEnvFile) return `
812
+ mode='c15t'
813
+ backendURL={process.env.NEXT_PUBLIC_C15T_URL}
814
+ consentCategories={['necessary', 'marketing']} // Optional: Specify which consent categories to show in the banner.
815
+ ignoreGeoLocation={true} // Useful for development to always view the banner.
816
+ `;
817
+ return `
818
+ mode='c15t'
819
+ backendURL='${backendURL || 'https://your-instance.c15t.dev'}'
820
+ consentCategories={['necessary', 'marketing']} // Optional: Specify which consent categories to show in the banner.
821
+ ignoreGeoLocation={true} // Useful for development to always view the banner.
822
+ `;
922
823
  case 'custom':
923
- return `{
924
- mode: 'custom',
925
- endpointHandlers: createCustomHandlers(),
926
- }`;
824
+ return `
825
+ mode='custom'
826
+ endpointHandlers={createCustomHandlers()}
827
+ `;
927
828
  default:
928
- return `{
929
- mode: 'offline',
930
- }`;
829
+ return `
830
+ mode='offline'
831
+ consentCategories={['necessary', 'marketing']} // Optional: Specify which consent categories to show in the banner.
832
+ `;
931
833
  }
932
834
  }
933
835
  function updateImports(layoutFile, packageName, mode) {
@@ -959,7 +861,7 @@ function wrapJsxContent(originalJsx, optionsText) {
959
861
  const hasHtmlTag = originalJsx.includes('<html') || originalJsx.includes('</html>');
960
862
  const hasBodyTag = originalJsx.includes('<body') || originalJsx.includes('</body>');
961
863
  const providerWrapper = (content)=>`
962
- <ConsentManagerProvider options={${optionsText}}>
864
+ <ConsentManagerProvider ${optionsText}>
963
865
  <CookieBanner />
964
866
  <ConsentManagerDialog />
965
867
  ${content}
@@ -1083,9 +985,8 @@ function generateRewriteDestination(backendURL, useEnvFile) {
1083
985
  }
1084
986
  function createNewNextConfig(backendURL, useEnvFile) {
1085
987
  const { destination, isTemplateLiteral } = generateRewriteDestination(backendURL, useEnvFile);
1086
- const envImport = useEnvFile ? "import './src/env';\n\n" : '';
1087
988
  const destinationValue = isTemplateLiteral ? `\`${destination}\`` : `'${destination}'`;
1088
- return `${envImport}import type { NextConfig } from 'next';
989
+ return `import type { NextConfig } from 'next';
1089
990
 
1090
991
  const config: NextConfig = {
1091
992
  async rewrites() {
@@ -1110,7 +1011,6 @@ function createRewriteRule(destination, isTemplateLiteral) {
1110
1011
  }
1111
1012
  function updateExistingConfig(configFile, backendURL, useEnvFile) {
1112
1013
  const { destination, isTemplateLiteral } = generateRewriteDestination(backendURL, useEnvFile);
1113
- if (useEnvFile && !configFile.getFullText().includes("import './src/env'")) configFile.insertText(0, "import './src/env';\n");
1114
1014
  const configObject = findConfigObject(configFile);
1115
1015
  if (!configObject) return false;
1116
1016
  const rewritesProperty = configObject.getProperty('rewrites');
@@ -1630,10 +1530,9 @@ async function startOnboarding(context, existingConfig) {
1630
1530
  }
1631
1531
  }
1632
1532
  async function performOnboarding(context, existingConfig, handleCancel) {
1633
- const { telemetry, logger } = context;
1533
+ const { telemetry, logger, packageManager } = context;
1634
1534
  const isUpdate = !!existingConfig;
1635
1535
  const projectRoot = await detectProjectRoot(context.cwd, logger);
1636
- const packageManager = await detectPackageManager(projectRoot, logger);
1637
1536
  const { pkg } = await detectFramework(projectRoot, logger);
1638
1537
  if (!pkg) throw new Error('Error detecting framework');
1639
1538
  const storageMode = await handleStorageModeSelection(context, handleCancel, existingConfig);
@@ -2375,6 +2274,66 @@ function createFileSystem(context) {
2375
2274
  }
2376
2275
  };
2377
2276
  }
2277
+ const SUPPORTED_PACKAGE_MANAGERS = [
2278
+ 'npm',
2279
+ 'yarn',
2280
+ 'pnpm'
2281
+ ];
2282
+ async function getPackageManagerVersion(pm) {
2283
+ try {
2284
+ const { execSync } = await import("node:child_process");
2285
+ const version = execSync(`${pm} --version`).toString().trim();
2286
+ return version;
2287
+ } catch {
2288
+ return null;
2289
+ }
2290
+ }
2291
+ async function detectPackageManager(projectRoot, logger) {
2292
+ try {
2293
+ logger?.debug('Detecting package manager');
2294
+ const pm = await (0, __WEBPACK_EXTERNAL_MODULE_package_manager_detector_detect_94d6a9ae__.detect)({
2295
+ cwd: projectRoot
2296
+ });
2297
+ if (!pm) throw new Error('No package manager detected');
2298
+ logger?.debug(`Detected package manager: ${pm.name}`);
2299
+ if (!SUPPORTED_PACKAGE_MANAGERS.includes(pm.name)) throw new Error(`Unsupported package manager: ${pm.name}`);
2300
+ return {
2301
+ name: pm.name,
2302
+ version: pm.version ?? null
2303
+ };
2304
+ } catch (error) {
2305
+ logger?.error(`Error detecting package manager: ${error instanceof Error ? error.message : String(error)}`);
2306
+ }
2307
+ const selectedPackageManager = await __WEBPACK_EXTERNAL_MODULE__clack_prompts_3cae1695__.select({
2308
+ message: 'Please select your package manager:',
2309
+ options: [
2310
+ {
2311
+ value: 'npm',
2312
+ label: 'npm'
2313
+ },
2314
+ {
2315
+ value: 'yarn',
2316
+ label: 'yarn'
2317
+ },
2318
+ {
2319
+ value: 'pnpm',
2320
+ label: 'pnpm'
2321
+ }
2322
+ ],
2323
+ initialValue: 'npm'
2324
+ });
2325
+ if (__WEBPACK_EXTERNAL_MODULE__clack_prompts_3cae1695__.isCancel(selectedPackageManager)) {
2326
+ logger?.debug('Package manager selection cancelled by user');
2327
+ logger?.failed('Package manager selection cancelled. Exiting.');
2328
+ process.exit(0);
2329
+ }
2330
+ const version = await getPackageManagerVersion(selectedPackageManager);
2331
+ logger?.debug(`User selected package manager: ${selectedPackageManager} (version: ${version ?? 'unknown'})`);
2332
+ return {
2333
+ name: selectedPackageManager,
2334
+ version
2335
+ };
2336
+ }
2378
2337
  const globalFlags = [
2379
2338
  {
2380
2339
  names: [
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/onboarding/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAczD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAiBnD;;;;;GAKG;AACH,wBAAsB,eAAe,CACpC,OAAO,EAAE,UAAU,EACnB,cAAc,CAAC,EAAE,WAAW,GAAG,qBAAqB,GAAG,IAAI,iBA6C3D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/onboarding/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAWzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAiBnD;;;;;GAKG;AACH,wBAAsB,eAAe,CACpC,OAAO,EAAE,UAAU,EACnB,cAAc,CAAC,EAAE,WAAW,GAAG,qBAAqB,GAAG,IAAI,iBA6C3D"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/onboarding/templates/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAC1C,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,OAAO,EACpB,MAAM,CAAC,EAAE,SAAS,GAChB,MAAM,CA+FR"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/onboarding/templates/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAC1C,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,OAAO,EACpB,MAAM,CAAC,EAAE,SAAS,GAChB,MAAM,CAiGR"}
@@ -1 +1 @@
1
- {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/onboarding/templates/layout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAOvE,UAAU,wBAAwB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,iBAAiB,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB;AAkKD;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,EACvC,WAAW,EACX,IAAI,EACJ,GAAG,EACH,UAAU,EACV,UAAU,EACV,WAAW,GACX,EAAE,wBAAwB,GAAG,OAAO,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;CACzB,CAAC,CA2DD"}
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/onboarding/templates/layout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAOvE,UAAU,wBAAwB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,iBAAiB,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB;AAyKD;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,EACvC,WAAW,EACX,IAAI,EACJ,GAAG,EACH,UAAU,EACV,UAAU,EACV,WAAW,GACX,EAAE,wBAAwB,GAAG,OAAO,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;CACzB,CAAC,CA2DD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c15t/cli",
3
- "version": "1.3.3",
3
+ "version": "1.3.4-canary-20250626090931",
4
4
  "description": "The CLI for c15t",
5
5
  "type": "module",
6
6
  "exports": "./dist/index.mjs",
@@ -24,13 +24,13 @@
24
24
  "fs-extra": "^11.3.0",
25
25
  "jiti": "^2.4.2",
26
26
  "open": "^10.1.1",
27
- "package-manager-detector": "^1.2.0",
27
+ "package-manager-detector": "^1.3.0",
28
28
  "picocolors": "^1.1.1",
29
29
  "posthog-node": "^4.11.7",
30
30
  "ts-morph": "^25.0.1",
31
31
  "zod": "^3.24.2",
32
32
  "@c15t/backend": "1.3.1",
33
- "@c15t/react": "1.3.3"
33
+ "@c15t/react": "1.3.4-canary-20250626090931"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@types/figlet": "^1.7.0",