create-nextly-app 0.0.2-alpha.28 → 0.0.2-alpha.29

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 (34) hide show
  1. package/dist/{chunk-XMNVVIVZ.mjs → chunk-C5CWOU22.mjs} +439 -203
  2. package/dist/chunk-C5CWOU22.mjs.map +1 -0
  3. package/dist/cli.cjs +450 -214
  4. package/dist/cli.cjs.map +1 -1
  5. package/dist/cli.mjs +2 -2
  6. package/dist/cli.mjs.map +1 -1
  7. package/dist/index.cjs +309 -73
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.cts +2 -1
  10. package/dist/index.d.ts +2 -1
  11. package/dist/index.mjs +1 -1
  12. package/package.json +4 -4
  13. package/templates/plugin/README.md +44 -0
  14. package/templates/plugin/dev/.env.example +8 -0
  15. package/templates/plugin/dev/instrumentation.ts +10 -0
  16. package/templates/plugin/dev/next.config.ts +30 -0
  17. package/templates/plugin/dev/nextly.config.ts +17 -0
  18. package/templates/plugin/dev/src/app/admin/[[...params]]/page.tsx +9 -0
  19. package/templates/plugin/dev/src/app/admin/api/[[...params]]/route.ts +19 -0
  20. package/templates/plugin/dev/src/app/layout.tsx +13 -0
  21. package/templates/plugin/dev/tsconfig.json +22 -0
  22. package/templates/plugin/eslint.config.mjs +8 -0
  23. package/templates/plugin/src/admin/SettingsPage.tsx +13 -0
  24. package/templates/plugin/src/admin/index.ts +21 -0
  25. package/templates/plugin/src/collections/example.ts +13 -0
  26. package/templates/plugin/src/index.ts +6 -0
  27. package/templates/plugin/src/plugin.test.ts +29 -0
  28. package/templates/plugin/src/plugin.ts +48 -0
  29. package/templates/plugin/src/types.ts +17 -0
  30. package/templates/plugin/template.json +14 -0
  31. package/templates/plugin/tsconfig.json +18 -0
  32. package/templates/plugin/tsup.config.ts +22 -0
  33. package/templates/plugin/vitest.config.ts +8 -0
  34. package/dist/chunk-XMNVVIVZ.mjs.map +0 -1
package/dist/index.cjs CHANGED
@@ -11125,7 +11125,7 @@ var require_dist = __commonJS2({
11125
11125
  }
11126
11126
  });
11127
11127
  var require_constants = __commonJS2({
11128
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/constants.js"(exports$1, module) {
11128
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/constants.js"(exports$1, module) {
11129
11129
  var SEMVER_SPEC_VERSION = "2.0.0";
11130
11130
  var MAX_LENGTH = 256;
11131
11131
  var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || /* istanbul ignore next */
@@ -11154,14 +11154,14 @@ var require_constants = __commonJS2({
11154
11154
  }
11155
11155
  });
11156
11156
  var require_debug = __commonJS2({
11157
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/debug.js"(exports$1, module) {
11157
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/debug.js"(exports$1, module) {
11158
11158
  var debug = typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error("SEMVER", ...args) : () => {
11159
11159
  };
11160
11160
  module.exports = debug;
11161
11161
  }
11162
11162
  });
11163
11163
  var require_re = __commonJS2({
11164
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/re.js"(exports$1, module) {
11164
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/re.js"(exports$1, module) {
11165
11165
  var {
11166
11166
  MAX_SAFE_COMPONENT_LENGTH,
11167
11167
  MAX_SAFE_BUILD_LENGTH,
@@ -11246,7 +11246,7 @@ var require_re = __commonJS2({
11246
11246
  }
11247
11247
  });
11248
11248
  var require_parse_options = __commonJS2({
11249
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/parse-options.js"(exports$1, module) {
11249
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/parse-options.js"(exports$1, module) {
11250
11250
  var looseOption = Object.freeze({ loose: true });
11251
11251
  var emptyOpts = Object.freeze({});
11252
11252
  var parseOptions = (options) => {
@@ -11262,9 +11262,12 @@ var require_parse_options = __commonJS2({
11262
11262
  }
11263
11263
  });
11264
11264
  var require_identifiers = __commonJS2({
11265
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/identifiers.js"(exports$1, module) {
11265
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/identifiers.js"(exports$1, module) {
11266
11266
  var numeric = /^[0-9]+$/;
11267
11267
  var compareIdentifiers = (a2, b2) => {
11268
+ if (typeof a2 === "number" && typeof b2 === "number") {
11269
+ return a2 === b2 ? 0 : a2 < b2 ? -1 : 1;
11270
+ }
11268
11271
  const anum = numeric.test(a2);
11269
11272
  const bnum = numeric.test(b2);
11270
11273
  if (anum && bnum) {
@@ -11281,7 +11284,7 @@ var require_identifiers = __commonJS2({
11281
11284
  }
11282
11285
  });
11283
11286
  var require_semver = __commonJS2({
11284
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/semver.js"(exports$1, module) {
11287
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/classes/semver.js"(exports$1, module) {
11285
11288
  var debug = require_debug();
11286
11289
  var { MAX_LENGTH, MAX_SAFE_INTEGER } = require_constants();
11287
11290
  var { safeRe: re3, t: t2 } = require_re();
@@ -11368,7 +11371,25 @@ var require_semver = __commonJS2({
11368
11371
  if (!(other instanceof _SemVer)) {
11369
11372
  other = new _SemVer(other, this.options);
11370
11373
  }
11371
- return compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch);
11374
+ if (this.major < other.major) {
11375
+ return -1;
11376
+ }
11377
+ if (this.major > other.major) {
11378
+ return 1;
11379
+ }
11380
+ if (this.minor < other.minor) {
11381
+ return -1;
11382
+ }
11383
+ if (this.minor > other.minor) {
11384
+ return 1;
11385
+ }
11386
+ if (this.patch < other.patch) {
11387
+ return -1;
11388
+ }
11389
+ if (this.patch > other.patch) {
11390
+ return 1;
11391
+ }
11392
+ return 0;
11372
11393
  }
11373
11394
  comparePre(other) {
11374
11395
  if (!(other instanceof _SemVer)) {
@@ -11539,7 +11560,7 @@ var require_semver = __commonJS2({
11539
11560
  }
11540
11561
  });
11541
11562
  var require_parse = __commonJS2({
11542
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/parse.js"(exports$1, module) {
11563
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/parse.js"(exports$1, module) {
11543
11564
  var SemVer = require_semver();
11544
11565
  var parse = (version2, options, throwErrors = false) => {
11545
11566
  if (version2 instanceof SemVer) {
@@ -11558,7 +11579,7 @@ var require_parse = __commonJS2({
11558
11579
  }
11559
11580
  });
11560
11581
  var require_valid = __commonJS2({
11561
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/valid.js"(exports$1, module) {
11582
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/valid.js"(exports$1, module) {
11562
11583
  var parse = require_parse();
11563
11584
  var valid = (version2, options) => {
11564
11585
  const v2 = parse(version2, options);
@@ -11568,7 +11589,7 @@ var require_valid = __commonJS2({
11568
11589
  }
11569
11590
  });
11570
11591
  var require_clean = __commonJS2({
11571
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/clean.js"(exports$1, module) {
11592
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/clean.js"(exports$1, module) {
11572
11593
  var parse = require_parse();
11573
11594
  var clean = (version2, options) => {
11574
11595
  const s3 = parse(version2.trim().replace(/^[=v]+/, ""), options);
@@ -11578,7 +11599,7 @@ var require_clean = __commonJS2({
11578
11599
  }
11579
11600
  });
11580
11601
  var require_inc = __commonJS2({
11581
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/inc.js"(exports$1, module) {
11602
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/inc.js"(exports$1, module) {
11582
11603
  var SemVer = require_semver();
11583
11604
  var inc = (version2, release, options, identifier, identifierBase) => {
11584
11605
  if (typeof options === "string") {
@@ -11599,7 +11620,7 @@ var require_inc = __commonJS2({
11599
11620
  }
11600
11621
  });
11601
11622
  var require_diff = __commonJS2({
11602
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/diff.js"(exports$1, module) {
11623
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/diff.js"(exports$1, module) {
11603
11624
  var parse = require_parse();
11604
11625
  var diff = (version1, version2) => {
11605
11626
  const v1 = parse(version1, null, true);
@@ -11640,28 +11661,28 @@ var require_diff = __commonJS2({
11640
11661
  }
11641
11662
  });
11642
11663
  var require_major = __commonJS2({
11643
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/major.js"(exports$1, module) {
11664
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/major.js"(exports$1, module) {
11644
11665
  var SemVer = require_semver();
11645
11666
  var major = (a2, loose) => new SemVer(a2, loose).major;
11646
11667
  module.exports = major;
11647
11668
  }
11648
11669
  });
11649
11670
  var require_minor = __commonJS2({
11650
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/minor.js"(exports$1, module) {
11671
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/minor.js"(exports$1, module) {
11651
11672
  var SemVer = require_semver();
11652
11673
  var minor = (a2, loose) => new SemVer(a2, loose).minor;
11653
11674
  module.exports = minor;
11654
11675
  }
11655
11676
  });
11656
11677
  var require_patch = __commonJS2({
11657
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/patch.js"(exports$1, module) {
11678
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/patch.js"(exports$1, module) {
11658
11679
  var SemVer = require_semver();
11659
11680
  var patch = (a2, loose) => new SemVer(a2, loose).patch;
11660
11681
  module.exports = patch;
11661
11682
  }
11662
11683
  });
11663
11684
  var require_prerelease = __commonJS2({
11664
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/prerelease.js"(exports$1, module) {
11685
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/prerelease.js"(exports$1, module) {
11665
11686
  var parse = require_parse();
11666
11687
  var prerelease = (version2, options) => {
11667
11688
  const parsed = parse(version2, options);
@@ -11671,28 +11692,28 @@ var require_prerelease = __commonJS2({
11671
11692
  }
11672
11693
  });
11673
11694
  var require_compare = __commonJS2({
11674
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare.js"(exports$1, module) {
11695
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/compare.js"(exports$1, module) {
11675
11696
  var SemVer = require_semver();
11676
11697
  var compare = (a2, b2, loose) => new SemVer(a2, loose).compare(new SemVer(b2, loose));
11677
11698
  module.exports = compare;
11678
11699
  }
11679
11700
  });
11680
11701
  var require_rcompare = __commonJS2({
11681
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rcompare.js"(exports$1, module) {
11702
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/rcompare.js"(exports$1, module) {
11682
11703
  var compare = require_compare();
11683
11704
  var rcompare = (a2, b2, loose) => compare(b2, a2, loose);
11684
11705
  module.exports = rcompare;
11685
11706
  }
11686
11707
  });
11687
11708
  var require_compare_loose = __commonJS2({
11688
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-loose.js"(exports$1, module) {
11709
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/compare-loose.js"(exports$1, module) {
11689
11710
  var compare = require_compare();
11690
11711
  var compareLoose = (a2, b2) => compare(a2, b2, true);
11691
11712
  module.exports = compareLoose;
11692
11713
  }
11693
11714
  });
11694
11715
  var require_compare_build = __commonJS2({
11695
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-build.js"(exports$1, module) {
11716
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/compare-build.js"(exports$1, module) {
11696
11717
  var SemVer = require_semver();
11697
11718
  var compareBuild = (a2, b2, loose) => {
11698
11719
  const versionA = new SemVer(a2, loose);
@@ -11703,63 +11724,63 @@ var require_compare_build = __commonJS2({
11703
11724
  }
11704
11725
  });
11705
11726
  var require_sort = __commonJS2({
11706
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/sort.js"(exports$1, module) {
11727
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/sort.js"(exports$1, module) {
11707
11728
  var compareBuild = require_compare_build();
11708
11729
  var sort = (list, loose) => list.sort((a2, b2) => compareBuild(a2, b2, loose));
11709
11730
  module.exports = sort;
11710
11731
  }
11711
11732
  });
11712
11733
  var require_rsort = __commonJS2({
11713
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rsort.js"(exports$1, module) {
11734
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/rsort.js"(exports$1, module) {
11714
11735
  var compareBuild = require_compare_build();
11715
11736
  var rsort = (list, loose) => list.sort((a2, b2) => compareBuild(b2, a2, loose));
11716
11737
  module.exports = rsort;
11717
11738
  }
11718
11739
  });
11719
11740
  var require_gt = __commonJS2({
11720
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gt.js"(exports$1, module) {
11741
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/gt.js"(exports$1, module) {
11721
11742
  var compare = require_compare();
11722
11743
  var gt4 = (a2, b2, loose) => compare(a2, b2, loose) > 0;
11723
11744
  module.exports = gt4;
11724
11745
  }
11725
11746
  });
11726
11747
  var require_lt = __commonJS2({
11727
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lt.js"(exports$1, module) {
11748
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/lt.js"(exports$1, module) {
11728
11749
  var compare = require_compare();
11729
11750
  var lt3 = (a2, b2, loose) => compare(a2, b2, loose) < 0;
11730
11751
  module.exports = lt3;
11731
11752
  }
11732
11753
  });
11733
11754
  var require_eq = __commonJS2({
11734
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/eq.js"(exports$1, module) {
11755
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/eq.js"(exports$1, module) {
11735
11756
  var compare = require_compare();
11736
11757
  var eq = (a2, b2, loose) => compare(a2, b2, loose) === 0;
11737
11758
  module.exports = eq;
11738
11759
  }
11739
11760
  });
11740
11761
  var require_neq = __commonJS2({
11741
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/neq.js"(exports$1, module) {
11762
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/neq.js"(exports$1, module) {
11742
11763
  var compare = require_compare();
11743
11764
  var neq = (a2, b2, loose) => compare(a2, b2, loose) !== 0;
11744
11765
  module.exports = neq;
11745
11766
  }
11746
11767
  });
11747
11768
  var require_gte = __commonJS2({
11748
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gte.js"(exports$1, module) {
11769
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/gte.js"(exports$1, module) {
11749
11770
  var compare = require_compare();
11750
11771
  var gte = (a2, b2, loose) => compare(a2, b2, loose) >= 0;
11751
11772
  module.exports = gte;
11752
11773
  }
11753
11774
  });
11754
11775
  var require_lte = __commonJS2({
11755
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lte.js"(exports$1, module) {
11776
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/lte.js"(exports$1, module) {
11756
11777
  var compare = require_compare();
11757
11778
  var lte = (a2, b2, loose) => compare(a2, b2, loose) <= 0;
11758
11779
  module.exports = lte;
11759
11780
  }
11760
11781
  });
11761
11782
  var require_cmp = __commonJS2({
11762
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/cmp.js"(exports$1, module) {
11783
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/cmp.js"(exports$1, module) {
11763
11784
  var eq = require_eq();
11764
11785
  var neq = require_neq();
11765
11786
  var gt4 = require_gt();
@@ -11806,7 +11827,7 @@ var require_cmp = __commonJS2({
11806
11827
  }
11807
11828
  });
11808
11829
  var require_coerce = __commonJS2({
11809
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/coerce.js"(exports$1, module) {
11830
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/coerce.js"(exports$1, module) {
11810
11831
  var SemVer = require_semver();
11811
11832
  var parse = require_parse();
11812
11833
  var { safeRe: re3, t: t2 } = require_re();
@@ -11848,8 +11869,46 @@ var require_coerce = __commonJS2({
11848
11869
  module.exports = coerce;
11849
11870
  }
11850
11871
  });
11872
+ var require_truncate = __commonJS2({
11873
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/truncate.js"(exports$1, module) {
11874
+ var parse = require_parse();
11875
+ var constants4 = require_constants();
11876
+ var SemVer = require_semver();
11877
+ var truncate = (version2, truncation, options) => {
11878
+ if (!constants4.RELEASE_TYPES.includes(truncation)) {
11879
+ return null;
11880
+ }
11881
+ const clonedVersion = cloneInputVersion(version2, options);
11882
+ return clonedVersion && doTruncation(clonedVersion, truncation);
11883
+ };
11884
+ var cloneInputVersion = (version2, options) => {
11885
+ const versionStringToParse = version2 instanceof SemVer ? version2.version : version2;
11886
+ return parse(versionStringToParse, options);
11887
+ };
11888
+ var doTruncation = (version2, truncation) => {
11889
+ if (isPrerelease(truncation)) {
11890
+ return version2.version;
11891
+ }
11892
+ version2.prerelease = [];
11893
+ switch (truncation) {
11894
+ case "major":
11895
+ version2.minor = 0;
11896
+ version2.patch = 0;
11897
+ break;
11898
+ case "minor":
11899
+ version2.patch = 0;
11900
+ break;
11901
+ }
11902
+ return version2.format();
11903
+ };
11904
+ var isPrerelease = (type) => {
11905
+ return type.startsWith("pre");
11906
+ };
11907
+ module.exports = truncate;
11908
+ }
11909
+ });
11851
11910
  var require_lrucache = __commonJS2({
11852
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/lrucache.js"(exports$1, module) {
11911
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/lrucache.js"(exports$1, module) {
11853
11912
  var LRUCache = class {
11854
11913
  constructor() {
11855
11914
  this.max = 1e3;
@@ -11884,7 +11943,7 @@ var require_lrucache = __commonJS2({
11884
11943
  }
11885
11944
  });
11886
11945
  var require_range = __commonJS2({
11887
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/range.js"(exports$1, module) {
11946
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/classes/range.js"(exports$1, module) {
11888
11947
  var SPACE_CHARACTERS = /\s+/g;
11889
11948
  var Range = class _Range {
11890
11949
  constructor(range, options) {
@@ -12054,6 +12113,7 @@ var require_range = __commonJS2({
12054
12113
  return result;
12055
12114
  };
12056
12115
  var parseComparator = (comp, options) => {
12116
+ comp = comp.replace(re3[t2.BUILD], "");
12057
12117
  debug("comp", comp, options);
12058
12118
  comp = replaceCarets(comp, options);
12059
12119
  debug("caret", comp);
@@ -12257,7 +12317,7 @@ var require_range = __commonJS2({
12257
12317
  }
12258
12318
  });
12259
12319
  var require_comparator = __commonJS2({
12260
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/comparator.js"(exports$1, module) {
12320
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/classes/comparator.js"(exports$1, module) {
12261
12321
  var ANY = Symbol("SemVer ANY");
12262
12322
  var Comparator = class _Comparator {
12263
12323
  static get ANY() {
@@ -12367,7 +12427,7 @@ var require_comparator = __commonJS2({
12367
12427
  }
12368
12428
  });
12369
12429
  var require_satisfies = __commonJS2({
12370
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/satisfies.js"(exports$1, module) {
12430
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/satisfies.js"(exports$1, module) {
12371
12431
  var Range = require_range();
12372
12432
  var satisfies = (version2, range, options) => {
12373
12433
  try {
@@ -12381,14 +12441,14 @@ var require_satisfies = __commonJS2({
12381
12441
  }
12382
12442
  });
12383
12443
  var require_to_comparators = __commonJS2({
12384
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/to-comparators.js"(exports$1, module) {
12444
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/ranges/to-comparators.js"(exports$1, module) {
12385
12445
  var Range = require_range();
12386
12446
  var toComparators = (range, options) => new Range(range, options).set.map((comp) => comp.map((c3) => c3.value).join(" ").trim().split(" "));
12387
12447
  module.exports = toComparators;
12388
12448
  }
12389
12449
  });
12390
12450
  var require_max_satisfying = __commonJS2({
12391
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/max-satisfying.js"(exports$1, module) {
12451
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/ranges/max-satisfying.js"(exports$1, module) {
12392
12452
  var SemVer = require_semver();
12393
12453
  var Range = require_range();
12394
12454
  var maxSatisfying = (versions, range, options) => {
@@ -12414,7 +12474,7 @@ var require_max_satisfying = __commonJS2({
12414
12474
  }
12415
12475
  });
12416
12476
  var require_min_satisfying = __commonJS2({
12417
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-satisfying.js"(exports$1, module) {
12477
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/ranges/min-satisfying.js"(exports$1, module) {
12418
12478
  var SemVer = require_semver();
12419
12479
  var Range = require_range();
12420
12480
  var minSatisfying = (versions, range, options) => {
@@ -12440,7 +12500,7 @@ var require_min_satisfying = __commonJS2({
12440
12500
  }
12441
12501
  });
12442
12502
  var require_min_version = __commonJS2({
12443
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-version.js"(exports$1, module) {
12503
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/ranges/min-version.js"(exports$1, module) {
12444
12504
  var SemVer = require_semver();
12445
12505
  var Range = require_range();
12446
12506
  var gt4 = require_gt();
@@ -12496,7 +12556,7 @@ var require_min_version = __commonJS2({
12496
12556
  }
12497
12557
  });
12498
12558
  var require_valid2 = __commonJS2({
12499
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/valid.js"(exports$1, module) {
12559
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/ranges/valid.js"(exports$1, module) {
12500
12560
  var Range = require_range();
12501
12561
  var validRange = (range, options) => {
12502
12562
  try {
@@ -12509,7 +12569,7 @@ var require_valid2 = __commonJS2({
12509
12569
  }
12510
12570
  });
12511
12571
  var require_outside = __commonJS2({
12512
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/outside.js"(exports$1, module) {
12572
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/ranges/outside.js"(exports$1, module) {
12513
12573
  var SemVer = require_semver();
12514
12574
  var Comparator = require_comparator();
12515
12575
  var { ANY } = Comparator;
@@ -12575,21 +12635,21 @@ var require_outside = __commonJS2({
12575
12635
  }
12576
12636
  });
12577
12637
  var require_gtr = __commonJS2({
12578
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/gtr.js"(exports$1, module) {
12638
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/ranges/gtr.js"(exports$1, module) {
12579
12639
  var outside = require_outside();
12580
12640
  var gtr = (version2, range, options) => outside(version2, range, ">", options);
12581
12641
  module.exports = gtr;
12582
12642
  }
12583
12643
  });
12584
12644
  var require_ltr = __commonJS2({
12585
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/ltr.js"(exports$1, module) {
12645
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/ranges/ltr.js"(exports$1, module) {
12586
12646
  var outside = require_outside();
12587
12647
  var ltr = (version2, range, options) => outside(version2, range, "<", options);
12588
12648
  module.exports = ltr;
12589
12649
  }
12590
12650
  });
12591
12651
  var require_intersects = __commonJS2({
12592
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/intersects.js"(exports$1, module) {
12652
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/ranges/intersects.js"(exports$1, module) {
12593
12653
  var Range = require_range();
12594
12654
  var intersects = (r1, r2, options) => {
12595
12655
  r1 = new Range(r1, options);
@@ -12600,7 +12660,7 @@ var require_intersects = __commonJS2({
12600
12660
  }
12601
12661
  });
12602
12662
  var require_simplify = __commonJS2({
12603
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/simplify.js"(exports$1, module) {
12663
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/ranges/simplify.js"(exports$1, module) {
12604
12664
  var satisfies = require_satisfies();
12605
12665
  var compare = require_compare();
12606
12666
  module.exports = (versions, range, options) => {
@@ -12647,7 +12707,7 @@ var require_simplify = __commonJS2({
12647
12707
  }
12648
12708
  });
12649
12709
  var require_subset = __commonJS2({
12650
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/subset.js"(exports$1, module) {
12710
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/ranges/subset.js"(exports$1, module) {
12651
12711
  var Range = require_range();
12652
12712
  var Comparator = require_comparator();
12653
12713
  var { ANY } = Comparator;
@@ -12806,7 +12866,7 @@ var require_subset = __commonJS2({
12806
12866
  }
12807
12867
  });
12808
12868
  var require_semver2 = __commonJS2({
12809
- "../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/index.js"(exports$1, module) {
12869
+ "../../node_modules/.pnpm/semver@7.8.0/node_modules/semver/index.js"(exports$1, module) {
12810
12870
  var internalRe = require_re();
12811
12871
  var constants4 = require_constants();
12812
12872
  var SemVer = require_semver();
@@ -12834,6 +12894,7 @@ var require_semver2 = __commonJS2({
12834
12894
  var lte = require_lte();
12835
12895
  var cmp = require_cmp();
12836
12896
  var coerce = require_coerce();
12897
+ var truncate = require_truncate();
12837
12898
  var Comparator = require_comparator();
12838
12899
  var Range = require_range();
12839
12900
  var satisfies = require_satisfies();
@@ -12872,6 +12933,7 @@ var require_semver2 = __commonJS2({
12872
12933
  lte,
12873
12934
  cmp,
12874
12935
  coerce,
12936
+ truncate,
12875
12937
  Comparator,
12876
12938
  Range,
12877
12939
  satisfies,
@@ -20961,11 +21023,15 @@ function resolveTemplatePath(localTemplatePath) {
20961
21023
  );
20962
21024
  }
20963
21025
  function buildPlaceholderMap(options) {
20964
- const { database, databaseUrl } = options;
20965
- return {
20966
- "{{databaseDialect}}": database.type,
20967
- "{{databaseUrl}}": databaseUrl || database.envExample
20968
- };
21026
+ const { database, databaseUrl, pluginName, nextlyRange } = options;
21027
+ const map = {};
21028
+ if (database) {
21029
+ map["{{databaseDialect}}"] = database.type;
21030
+ map["{{databaseUrl}}"] = databaseUrl || database.envExample;
21031
+ }
21032
+ if (pluginName) map["{{pluginName}}"] = pluginName;
21033
+ if (nextlyRange) map["{{nextlyRange}}"] = nextlyRange;
21034
+ return map;
20969
21035
  }
20970
21036
  async function replacePlaceholdersInFile(filePath, placeholders) {
20971
21037
  const ext = path14__default.default.extname(filePath).toLowerCase();
@@ -21019,7 +21085,8 @@ var NEXTLY_PACKAGES = [
21019
21085
  "@nextlyhq/adapter-postgres",
21020
21086
  "@nextlyhq/adapter-mysql",
21021
21087
  "@nextlyhq/adapter-sqlite",
21022
- "@nextlyhq/plugin-form-builder"
21088
+ "@nextlyhq/plugin-form-builder",
21089
+ "@nextlyhq/plugin-sdk"
21023
21090
  ];
21024
21091
  var resolvedNextlyVersions = null;
21025
21092
  async function fetchLatestVersion(pkg) {
@@ -21062,6 +21129,9 @@ async function resolveRuntimeVersions() {
21062
21129
  return resolvedRuntimeVersions;
21063
21130
  }
21064
21131
  async function generatePackageJson(projectName, database, useYalc = false, projectType = "blank") {
21132
+ if (projectType === "plugin") {
21133
+ return generatePluginPackageJson(projectName, useYalc);
21134
+ }
21065
21135
  const runtimeVersions = await resolveRuntimeVersions();
21066
21136
  const dependencies = {
21067
21137
  next: runtimeVersions.next,
@@ -21128,6 +21198,82 @@ async function generatePackageJson(projectName, database, useYalc = false, proje
21128
21198
  };
21129
21199
  return JSON.stringify(pkg, null, 2) + "\n";
21130
21200
  }
21201
+ async function resolvePluginNextlyRange(useYalc) {
21202
+ if (useYalc) return ">=0.0.0";
21203
+ const versions = await resolveNextlyVersions();
21204
+ const v2 = versions["nextly"];
21205
+ return v2 && v2 !== "latest" ? v2 : ">=0.0.0";
21206
+ }
21207
+ async function generatePluginPackageJson(projectName, useYalc) {
21208
+ const versions = useYalc ? {} : await resolveNextlyVersions();
21209
+ const runtimeVersions = await resolveRuntimeVersions();
21210
+ const range = (pkg2) => versions[pkg2] ?? "latest";
21211
+ const peerDependencies = {
21212
+ nextly: range("nextly"),
21213
+ "@nextlyhq/admin": range("@nextlyhq/admin"),
21214
+ "@nextlyhq/plugin-sdk": range("@nextlyhq/plugin-sdk"),
21215
+ react: PINNED_VERSIONS.react,
21216
+ "react-dom": PINNED_VERSIONS["react-dom"]
21217
+ };
21218
+ const devDependencies = {
21219
+ nextly: range("nextly"),
21220
+ "@nextlyhq/admin": range("@nextlyhq/admin"),
21221
+ "@nextlyhq/ui": range("@nextlyhq/ui"),
21222
+ "@nextlyhq/plugin-sdk": range("@nextlyhq/plugin-sdk"),
21223
+ "@nextlyhq/adapter-drizzle": range("@nextlyhq/adapter-drizzle"),
21224
+ "@nextlyhq/adapter-sqlite": range("@nextlyhq/adapter-sqlite"),
21225
+ next: runtimeVersions.next,
21226
+ react: PINNED_VERSIONS.react,
21227
+ "react-dom": PINNED_VERSIONS["react-dom"],
21228
+ "better-sqlite3": "^12.0.0",
21229
+ "@types/node": PINNED_VERSIONS["@types/node"],
21230
+ "@types/react": PINNED_VERSIONS["@types/react"],
21231
+ "@types/react-dom": PINNED_VERSIONS["@types/react-dom"],
21232
+ typescript: PINNED_VERSIONS.typescript,
21233
+ tsup: "^8.5.0",
21234
+ vitest: "^4.0.8",
21235
+ eslint: PINNED_VERSIONS.eslint,
21236
+ "@eslint/js": PINNED_VERSIONS.eslint,
21237
+ "typescript-eslint": "^8.0.0"
21238
+ };
21239
+ const pkg = {
21240
+ name: projectName,
21241
+ version: "0.1.0",
21242
+ description: "A Nextly plugin.",
21243
+ type: "module",
21244
+ main: "./dist/index.mjs",
21245
+ module: "./dist/index.mjs",
21246
+ types: "./dist/index.d.ts",
21247
+ exports: {
21248
+ ".": {
21249
+ types: "./dist/index.d.ts",
21250
+ import: "./dist/index.mjs"
21251
+ },
21252
+ "./admin": {
21253
+ types: "./dist/admin/index.d.ts",
21254
+ import: "./dist/admin/index.mjs"
21255
+ }
21256
+ },
21257
+ // Only the built library ships. The dev/ playground is never published.
21258
+ files: ["dist"],
21259
+ keywords: ["nextly", "nextly-plugin"],
21260
+ scripts: {
21261
+ build: "tsup",
21262
+ // Runs the embedded playground (next dev with dev/ as the project root).
21263
+ dev: "next dev dev --turbopack",
21264
+ "check-types": "tsc --noEmit",
21265
+ lint: "eslint .",
21266
+ test: "vitest run",
21267
+ "types:generate": "nextly generate:types"
21268
+ },
21269
+ peerDependencies,
21270
+ devDependencies
21271
+ // Native build-script allowlist is NOT emitted here: pnpm 11 ignores the
21272
+ // package.json `pnpm` field. It lives in pnpm-workspace.yaml instead (written
21273
+ // by copyPluginTemplate via generatePnpmWorkspaceYaml).
21274
+ };
21275
+ return JSON.stringify(pkg, null, 2) + "\n";
21276
+ }
21131
21277
  var NATIVE_BUILD_DEPENDENCIES = [
21132
21278
  "better-sqlite3",
21133
21279
  "esbuild",
@@ -21180,6 +21326,10 @@ async function copyTemplate(options) {
21180
21326
  baseDir = path14__default.default.join(templatesRoot, "base");
21181
21327
  typeDir = path14__default.default.join(templatesRoot, projectType);
21182
21328
  }
21329
+ if (projectType === "plugin") {
21330
+ await copyPluginTemplate({ projectName, typeDir, targetDir, useYalc });
21331
+ return;
21332
+ }
21183
21333
  if (!await import_fs_extra8.default.pathExists(baseDir)) {
21184
21334
  throw new Error(
21185
21335
  `Base template not found at ${baseDir}. The package may be corrupted or the download failed.`
@@ -21271,6 +21421,42 @@ async function copyTemplate(options) {
21271
21421
  }
21272
21422
  await replacePlaceholders(targetDir, placeholders);
21273
21423
  }
21424
+ async function copyPluginTemplate(opts) {
21425
+ const { projectName, typeDir, targetDir, useYalc } = opts;
21426
+ if (!await import_fs_extra8.default.pathExists(typeDir)) {
21427
+ throw new Error(
21428
+ `Plugin template not found at ${typeDir}. The package may be corrupted or the download failed.`
21429
+ );
21430
+ }
21431
+ await import_fs_extra8.default.copy(typeDir, targetDir, {
21432
+ overwrite: true,
21433
+ filter: (src) => {
21434
+ const basename = path14__default.default.basename(src);
21435
+ return !SKIP_FILES.has(basename) && basename !== "template.json";
21436
+ }
21437
+ });
21438
+ const packageJsonContent = await generatePackageJson(
21439
+ projectName,
21440
+ { },
21441
+ useYalc,
21442
+ "plugin"
21443
+ );
21444
+ await import_fs_extra8.default.writeFile(
21445
+ path14__default.default.join(targetDir, "package.json"),
21446
+ packageJsonContent,
21447
+ "utf-8"
21448
+ );
21449
+ await import_fs_extra8.default.writeFile(
21450
+ path14__default.default.join(targetDir, "pnpm-workspace.yaml"),
21451
+ generatePnpmWorkspaceYaml(),
21452
+ "utf-8"
21453
+ );
21454
+ const nextlyRange = await resolvePluginNextlyRange(useYalc);
21455
+ await replacePlaceholders(
21456
+ targetDir,
21457
+ buildPlaceholderMap({ pluginName: projectName, nextlyRange })
21458
+ );
21459
+ }
21274
21460
 
21275
21461
  // src/installers/dependencies.ts
21276
21462
  var INSTALL_COMMANDS = {
@@ -24336,6 +24522,22 @@ var AVAILABLE_TEMPLATES = [
24336
24522
  hasFrontendPages: true,
24337
24523
  recommendedDatabase: "any",
24338
24524
  release: "alpha"
24525
+ },
24526
+ {
24527
+ name: "plugin",
24528
+ label: "Plugin",
24529
+ description: "Build a reusable Nextly plugin (publishable npm package)",
24530
+ hint: "Plugin package + embedded /dev playground; no schema approach",
24531
+ // Plugins don't ask code-first vs visual, ship no app frontend, and bring
24532
+ // their own collections — they are a publishable library, not an app.
24533
+ approaches: [],
24534
+ defaultApproach: null,
24535
+ collections: [],
24536
+ singles: [],
24537
+ hasDemoData: false,
24538
+ hasFrontendPages: false,
24539
+ recommendedDatabase: "sqlite",
24540
+ release: "alpha"
24339
24541
  }
24340
24542
  ];
24341
24543
  function getTemplate(name) {
@@ -24495,6 +24697,11 @@ function getTemplatePromptOptions() {
24495
24697
  label: "Blog",
24496
24698
  hint: "Posts, authors, categories, clean design"
24497
24699
  },
24700
+ {
24701
+ value: "plugin",
24702
+ label: "Plugin",
24703
+ hint: "Build a reusable Nextly plugin + embedded /dev playground"
24704
+ },
24498
24705
  {
24499
24706
  value: "_coming_soon",
24500
24707
  label: import_picocolors2.default.dim("More templates coming soon"),
@@ -24855,8 +25062,10 @@ async function createNextly(options = {}) {
24855
25062
  await generateTypesDirectory(cwd, projectInfo);
24856
25063
  await patchNextConfig(cwd, database);
24857
25064
  }
24858
- const envDatabase = databaseUrl ? { ...database, connectionUrl: databaseUrl, envExample: databaseUrl } : database;
24859
- await generateEnv(cwd, envDatabase);
25065
+ if (projectType !== "plugin") {
25066
+ const envDatabase = databaseUrl ? { ...database, connectionUrl: databaseUrl, envExample: databaseUrl } : database;
25067
+ await generateEnv(cwd, envDatabase);
25068
+ }
24860
25069
  s3.stop("Environment configured");
24861
25070
  } catch (error) {
24862
25071
  s3.stop("Failed to generate configuration");
@@ -24872,31 +25081,58 @@ async function createNextly(options = {}) {
24872
25081
  if (isFreshProject && projectName && !installInCwd) {
24873
25082
  lines.push(` ${import_picocolors3.default.bold("cd")} ${projectName}`);
24874
25083
  }
24875
- lines.push(` ${import_picocolors3.default.bold(devCommand)}`);
24876
- lines.push("");
24877
- if (databaseType === "sqlite") {
25084
+ if (projectType === "plugin") {
25085
+ lines.push(` ${import_picocolors3.default.bold(devCommand)}`);
25086
+ lines.push(
25087
+ ` ${import_picocolors3.default.dim("\u2192 runs the embedded /dev playground (SQLite, hot-reload)")}`
25088
+ );
25089
+ lines.push("");
25090
+ lines.push(
25091
+ ` Open ${import_picocolors3.default.cyan("http://localhost:3000/admin")} \u2014 your plugin is registered.`
25092
+ );
25093
+ lines.push(
25094
+ ` Edit your plugin in ${import_picocolors3.default.dim("src/")}; the ${import_picocolors3.default.dim("dev/")} app is never published.`
25095
+ );
25096
+ lines.push("");
25097
+ lines.push(
25098
+ ` ${import_picocolors3.default.bold(`${pm} test`)} runs the in-memory integration harness.`
25099
+ );
25100
+ lines.push(
25101
+ ` ${import_picocolors3.default.bold(`${pm} run build`)}, then ${import_picocolors3.default.bold("npm publish")} to ship.`
25102
+ );
25103
+ lines.push("");
24878
25104
  lines.push(
24879
- ` Your database (SQLite) is stored at ${import_picocolors3.default.dim("./data/nextly.db")}`
25105
+ ` Use it in an app: add ${import_picocolors3.default.dim("myPlugin()")} to ${import_picocolors3.default.dim("plugins")} in nextly.config.ts.`
24880
25106
  );
24881
25107
  } else {
25108
+ lines.push(` ${import_picocolors3.default.bold(devCommand)}`);
25109
+ lines.push("");
25110
+ if (databaseType === "sqlite") {
25111
+ lines.push(
25112
+ ` Your database (SQLite) is stored at ${import_picocolors3.default.dim("./data/nextly.db")}`
25113
+ );
25114
+ } else {
25115
+ lines.push(
25116
+ ` Make sure your ${DATABASE_LABELS[databaseType].label} server is running before starting.`
25117
+ );
25118
+ }
24882
25119
  lines.push(
24883
- ` Make sure your ${DATABASE_LABELS[databaseType].label} server is running before starting.`
25120
+ ` ${import_picocolors3.default.bold(devCommand)} will create system tables on first run.`
24884
25121
  );
25122
+ if (projectType === "blog") {
25123
+ lines.push(
25124
+ ` Visit ${import_picocolors3.default.cyan("http://localhost:3000")} to see your blog.`
25125
+ );
25126
+ }
25127
+ lines.push(
25128
+ ` Visit ${import_picocolors3.default.cyan("http://localhost:3000/admin/setup")} to create your admin account.`
25129
+ );
25130
+ lines.push("");
25131
+ lines.push(
25132
+ ` Storage: Using local disk ${import_picocolors3.default.dim("(./public/uploads)")} by default.`
25133
+ );
25134
+ lines.push(" See docs to configure S3, Vercel Blob, or other providers.");
24885
25135
  }
24886
- lines.push(
24887
- ` ${import_picocolors3.default.bold(devCommand)} will create system tables on first run.`
24888
- );
24889
- if (projectType === "blog") {
24890
- lines.push(` Visit ${import_picocolors3.default.cyan("http://localhost:3000")} to see your blog.`);
24891
- }
24892
- lines.push(
24893
- ` Visit ${import_picocolors3.default.cyan("http://localhost:3000/admin/setup")} to create your admin account.`
24894
- );
24895
- lines.push("");
24896
- lines.push(
24897
- ` Storage: Using local disk ${import_picocolors3.default.dim("(./public/uploads)")} by default.`
24898
- );
24899
- lines.push(" See docs to configure S3, Vercel Blob, or other providers.");
24900
25136
  Vt2(lines.join("\n"), "Next steps");
24901
25137
  Gt(`Docs: ${import_picocolors3.default.cyan("https://nextlyhq.com/docs")}`);
24902
25138
  }