canopycms 0.0.22 → 0.0.23

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 +1 @@
1
- {"version":3,"file":"branch-schema-cache.d.ts","sourceRoot":"","sources":["../src/branch-schema-cache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAUzD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,oBAAoB,CAAA;IAC5B,UAAU,EAAE,cAAc,EAAE,CAAA;IAC5B,QAAQ,EAAE,MAAM,CAAA;CACjB;AA8BD;;;;;;;;;;;;GAYG;AACH,qBAAa,iBAAiB;IAC5B,qFAAqF;IACrF,OAAO,CAAC,cAAc,CAA4B;IAElD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,IAAI,GAAE,aAAsB;IAIxC;;;;;;;OAOG;IACG,SAAS,CACb,UAAU,EAAE,MAAM,EAClB,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,GAAE,MAAkB,GAClC,OAAO,CAAC;QAAE,MAAM,EAAE,oBAAoB,CAAC;QAAC,UAAU,EAAE,cAAc,EAAE,CAAA;KAAE,CAAC;IAI1E;;OAEG;YACW,sBAAsB;IAkFpC;;;;OAIG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOpD"}
1
+ {"version":3,"file":"branch-schema-cache.d.ts","sourceRoot":"","sources":["../src/branch-schema-cache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAWzD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,oBAAoB,CAAA;IAC5B,UAAU,EAAE,cAAc,EAAE,CAAA;IAC5B,QAAQ,EAAE,MAAM,CAAA;CACjB;AA8BD;;;;;;;;;;;;GAYG;AACH,qBAAa,iBAAiB;IAC5B,qFAAqF;IACrF,OAAO,CAAC,cAAc,CAA4B;IAElD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,IAAI,GAAE,aAAsB;IAIxC;;;;;;;OAOG;IACG,SAAS,CACb,UAAU,EAAE,MAAM,EAClB,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,GAAE,MAAkB,GAClC,OAAO,CAAC;QAAE,MAAM,EAAE,oBAAoB,CAAC;QAAC,UAAU,EAAE,cAAc,EAAE,CAAA;KAAE,CAAC;IAI1E;;OAEG;YACW,sBAAsB;IA+FpC;;;;OAIG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CASpD"}
@@ -2,6 +2,7 @@ import fs from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import { resolveSchema, isValidSchema } from './schema/resolver.js';
4
4
  import { flattenSchema } from './config/flatten.js';
5
+ import { isBuildMode } from './build-mode.js';
5
6
  /** Bump when BranchSchemaCacheEntry shape changes to auto-invalidate stale caches */
6
7
  const SCHEMA_CACHE_VERSION = 2;
7
8
  /** Minimum interval between mtime staleness checks (ms) */
@@ -72,43 +73,48 @@ export class BranchSchemaCache {
72
73
  */
73
74
  async loadFromCacheOrResolve(branchRoot, entrySchemaRegistry, contentRootName) {
74
75
  const contentRoot = path.join(branchRoot, contentRootName);
75
- const cacheDir = path.join(branchRoot, '.canopy-meta');
76
- const cachePath = path.join(cacheDir, 'schema-cache.json');
77
- const stalePath = path.join(cacheDir, 'schema-cache.stale');
78
- // Check if cache exists and is not marked stale
79
- let cacheData = null;
80
- try {
81
- const staleExists = await fs
82
- .access(stalePath)
83
- .then(() => true)
84
- .catch(() => false);
85
- if (!staleExists) {
86
- const cacheContent = await fs.readFile(cachePath, 'utf-8');
87
- cacheData = JSON.parse(cacheContent);
76
+ // In static/build mode, branchRoot is process.cwd() (the project root).
77
+ // Skip disk cache to avoid creating .canopy-meta/ at the project root.
78
+ const skipDiskCache = isBuildMode();
79
+ if (!skipDiskCache) {
80
+ const cacheDir = path.join(branchRoot, '.canopy-meta');
81
+ const cachePath = path.join(cacheDir, 'schema-cache.json');
82
+ const stalePath = path.join(cacheDir, 'schema-cache.stale');
83
+ // Check if cache exists and is not marked stale
84
+ let cacheData = null;
85
+ try {
86
+ const staleExists = await fs
87
+ .access(stalePath)
88
+ .then(() => true)
89
+ .catch(() => false);
90
+ if (!staleExists) {
91
+ const cacheContent = await fs.readFile(cachePath, 'utf-8');
92
+ cacheData = JSON.parse(cacheContent);
93
+ }
88
94
  }
89
- }
90
- catch {
91
- // Cache doesn't exist or can't be read
92
- cacheData = null;
93
- }
94
- if (cacheData && cacheData.version === SCHEMA_CACHE_VERSION) {
95
- // In dev mode, also check file mtimes so direct schema edits (outside the CMS) are picked up.
96
- // Debounce: skip the walk if we checked this contentRoot within the last second.
97
- const now = Date.now();
98
- const lastCheck = this.lastMtimeCheck.get(contentRoot) ?? 0;
99
- if (this.devMode &&
100
- now - lastCheck >= MTIME_CHECK_DEBOUNCE_MS &&
101
- (await isStaleByMtime(contentRoot, new Date(cacheData.cachedAt)))) {
102
- this.lastMtimeCheck.set(contentRoot, now);
95
+ catch {
96
+ // Cache doesn't exist or can't be read
103
97
  cacheData = null;
104
98
  }
105
- else {
106
- if (this.devMode)
99
+ if (cacheData && cacheData.version === SCHEMA_CACHE_VERSION) {
100
+ // In dev mode, also check file mtimes so direct schema edits (outside the CMS) are picked up.
101
+ // Debounce: skip the walk if we checked this contentRoot within the last second.
102
+ const now = Date.now();
103
+ const lastCheck = this.lastMtimeCheck.get(contentRoot) ?? 0;
104
+ if (this.devMode &&
105
+ now - lastCheck >= MTIME_CHECK_DEBOUNCE_MS &&
106
+ (await isStaleByMtime(contentRoot, new Date(cacheData.cachedAt)))) {
107
107
  this.lastMtimeCheck.set(contentRoot, now);
108
- return { schema: cacheData.schema, flatSchema: cacheData.flatSchema };
108
+ cacheData = null;
109
+ }
110
+ else {
111
+ if (this.devMode)
112
+ this.lastMtimeCheck.set(contentRoot, now);
113
+ return { schema: cacheData.schema, flatSchema: cacheData.flatSchema };
114
+ }
109
115
  }
110
116
  }
111
- // Cache miss or stale - regenerate
117
+ // Cache miss, stale, or build mode - resolve fresh
112
118
  const result = await resolveSchema(contentRoot, entrySchemaRegistry);
113
119
  // Validate schema has content
114
120
  if (!isValidSchema(result.schema)) {
@@ -117,24 +123,29 @@ export class BranchSchemaCache {
117
123
  }
118
124
  // Use configured contentRoot name as base path for logical paths
119
125
  const flatSchema = flattenSchema(result.schema, contentRootName);
120
- // Save to cache
121
- await fs.mkdir(cacheDir, { recursive: true });
122
- const newCache = {
123
- version: SCHEMA_CACHE_VERSION,
124
- schema: result.schema,
125
- flatSchema,
126
- cachedAt: new Date().toISOString(),
127
- };
128
- // Atomic write: write to temp file, then rename
129
- const tmpPath = path.join(cacheDir, `schema-cache.tmp.${Date.now()}.${Math.random()}.json`);
130
- await fs.writeFile(tmpPath, JSON.stringify(newCache, null, 2), 'utf-8');
131
- await fs.rename(tmpPath, cachePath);
132
- // Remove stale marker if exists
133
- try {
134
- await fs.unlink(stalePath);
135
- }
136
- catch {
137
- // Stale marker may not exist - that's fine
126
+ if (!skipDiskCache) {
127
+ const cacheDir = path.join(branchRoot, '.canopy-meta');
128
+ const cachePath = path.join(cacheDir, 'schema-cache.json');
129
+ const stalePath = path.join(cacheDir, 'schema-cache.stale');
130
+ // Save to cache
131
+ await fs.mkdir(cacheDir, { recursive: true });
132
+ const newCache = {
133
+ version: SCHEMA_CACHE_VERSION,
134
+ schema: result.schema,
135
+ flatSchema,
136
+ cachedAt: new Date().toISOString(),
137
+ };
138
+ // Atomic write: write to temp file, then rename
139
+ const tmpPath = path.join(cacheDir, `schema-cache.tmp.${Date.now()}.${Math.random()}.json`);
140
+ await fs.writeFile(tmpPath, JSON.stringify(newCache, null, 2), 'utf-8');
141
+ await fs.rename(tmpPath, cachePath);
142
+ // Remove stale marker if exists
143
+ try {
144
+ await fs.unlink(stalePath);
145
+ }
146
+ catch {
147
+ // Stale marker may not exist - that's fine
148
+ }
138
149
  }
139
150
  return { schema: result.schema, flatSchema };
140
151
  }
@@ -144,6 +155,8 @@ export class BranchSchemaCache {
144
155
  * @param branchRoot - Root directory of the branch
145
156
  */
146
157
  async invalidate(branchRoot) {
158
+ if (isBuildMode())
159
+ return;
147
160
  const cacheDir = path.join(branchRoot, '.canopy-meta');
148
161
  const stalePath = path.join(cacheDir, 'schema-cache.stale');
149
162
  await fs.mkdir(cacheDir, { recursive: true });
@@ -1 +1 @@
1
- {"version":3,"file":"branch-schema-cache.js","sourceRoot":"","sources":["../src/branch-schema-cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"branch-schema-cache.js","sourceRoot":"","sources":["../src/branch-schema-cache.ts"],"names":[],"mappings":"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"}
@@ -1785,6 +1785,27 @@ function isValidSchema(schema) {
1785
1785
 
1786
1786
  // dist/branch-schema-cache.js
1787
1787
  init_flatten();
1788
+
1789
+ // dist/build-mode.js
1790
+ var isDeployedStatic = (config) => {
1791
+ return config.deployedAs === "static";
1792
+ };
1793
+ var isBuildMode = () => {
1794
+ if (process.env.NEXT_PHASE === "phase-production-build")
1795
+ return true;
1796
+ if (process.env.CANOPY_BUILD_MODE === "true")
1797
+ return true;
1798
+ return false;
1799
+ };
1800
+ var STATIC_DEPLOY_USER = Object.freeze({
1801
+ type: "authenticated",
1802
+ userId: "__static_deploy__",
1803
+ groups: ["Admins"],
1804
+ email: "static-deploy@canopycms",
1805
+ name: "Static Deploy"
1806
+ });
1807
+
1808
+ // dist/branch-schema-cache.js
1788
1809
  var SCHEMA_CACHE_VERSION = 2;
1789
1810
  var MTIME_CHECK_DEBOUNCE_MS = 1e3;
1790
1811
  async function isStaleByMtime(dir, cachedAt) {
@@ -1829,29 +1850,32 @@ var BranchSchemaCache = class {
1829
1850
  */
1830
1851
  async loadFromCacheOrResolve(branchRoot, entrySchemaRegistry, contentRootName) {
1831
1852
  const contentRoot = path6.join(branchRoot, contentRootName);
1832
- const cacheDir = path6.join(branchRoot, ".canopy-meta");
1833
- const cachePath = path6.join(cacheDir, "schema-cache.json");
1834
- const stalePath = path6.join(cacheDir, "schema-cache.stale");
1835
- let cacheData = null;
1836
- try {
1837
- const staleExists = await fs6.access(stalePath).then(() => true).catch(() => false);
1838
- if (!staleExists) {
1839
- const cacheContent = await fs6.readFile(cachePath, "utf-8");
1840
- cacheData = JSON.parse(cacheContent);
1841
- }
1842
- } catch {
1843
- cacheData = null;
1844
- }
1845
- if (cacheData && cacheData.version === SCHEMA_CACHE_VERSION) {
1846
- const now = Date.now();
1847
- const lastCheck = this.lastMtimeCheck.get(contentRoot) ?? 0;
1848
- if (this.devMode && now - lastCheck >= MTIME_CHECK_DEBOUNCE_MS && await isStaleByMtime(contentRoot, new Date(cacheData.cachedAt))) {
1849
- this.lastMtimeCheck.set(contentRoot, now);
1853
+ const skipDiskCache = isBuildMode();
1854
+ if (!skipDiskCache) {
1855
+ const cacheDir = path6.join(branchRoot, ".canopy-meta");
1856
+ const cachePath = path6.join(cacheDir, "schema-cache.json");
1857
+ const stalePath = path6.join(cacheDir, "schema-cache.stale");
1858
+ let cacheData = null;
1859
+ try {
1860
+ const staleExists = await fs6.access(stalePath).then(() => true).catch(() => false);
1861
+ if (!staleExists) {
1862
+ const cacheContent = await fs6.readFile(cachePath, "utf-8");
1863
+ cacheData = JSON.parse(cacheContent);
1864
+ }
1865
+ } catch {
1850
1866
  cacheData = null;
1851
- } else {
1852
- if (this.devMode)
1867
+ }
1868
+ if (cacheData && cacheData.version === SCHEMA_CACHE_VERSION) {
1869
+ const now = Date.now();
1870
+ const lastCheck = this.lastMtimeCheck.get(contentRoot) ?? 0;
1871
+ if (this.devMode && now - lastCheck >= MTIME_CHECK_DEBOUNCE_MS && await isStaleByMtime(contentRoot, new Date(cacheData.cachedAt))) {
1853
1872
  this.lastMtimeCheck.set(contentRoot, now);
1854
- return { schema: cacheData.schema, flatSchema: cacheData.flatSchema };
1873
+ cacheData = null;
1874
+ } else {
1875
+ if (this.devMode)
1876
+ this.lastMtimeCheck.set(contentRoot, now);
1877
+ return { schema: cacheData.schema, flatSchema: cacheData.flatSchema };
1878
+ }
1855
1879
  }
1856
1880
  }
1857
1881
  const result = await resolveSchema(contentRoot, entrySchemaRegistry);
@@ -1859,19 +1883,24 @@ var BranchSchemaCache = class {
1859
1883
  throw new Error(`No schema found in ${contentRoot}. Create .collection.json files with references to field schemas defined in your entry schema registry.`);
1860
1884
  }
1861
1885
  const flatSchema = flattenSchema(result.schema, contentRootName);
1862
- await fs6.mkdir(cacheDir, { recursive: true });
1863
- const newCache = {
1864
- version: SCHEMA_CACHE_VERSION,
1865
- schema: result.schema,
1866
- flatSchema,
1867
- cachedAt: (/* @__PURE__ */ new Date()).toISOString()
1868
- };
1869
- const tmpPath = path6.join(cacheDir, `schema-cache.tmp.${Date.now()}.${Math.random()}.json`);
1870
- await fs6.writeFile(tmpPath, JSON.stringify(newCache, null, 2), "utf-8");
1871
- await fs6.rename(tmpPath, cachePath);
1872
- try {
1873
- await fs6.unlink(stalePath);
1874
- } catch {
1886
+ if (!skipDiskCache) {
1887
+ const cacheDir = path6.join(branchRoot, ".canopy-meta");
1888
+ const cachePath = path6.join(cacheDir, "schema-cache.json");
1889
+ const stalePath = path6.join(cacheDir, "schema-cache.stale");
1890
+ await fs6.mkdir(cacheDir, { recursive: true });
1891
+ const newCache = {
1892
+ version: SCHEMA_CACHE_VERSION,
1893
+ schema: result.schema,
1894
+ flatSchema,
1895
+ cachedAt: (/* @__PURE__ */ new Date()).toISOString()
1896
+ };
1897
+ const tmpPath = path6.join(cacheDir, `schema-cache.tmp.${Date.now()}.${Math.random()}.json`);
1898
+ await fs6.writeFile(tmpPath, JSON.stringify(newCache, null, 2), "utf-8");
1899
+ await fs6.rename(tmpPath, cachePath);
1900
+ try {
1901
+ await fs6.unlink(stalePath);
1902
+ } catch {
1903
+ }
1875
1904
  }
1876
1905
  return { schema: result.schema, flatSchema };
1877
1906
  }
@@ -1881,6 +1910,8 @@ var BranchSchemaCache = class {
1881
1910
  * @param branchRoot - Root directory of the branch
1882
1911
  */
1883
1912
  async invalidate(branchRoot) {
1913
+ if (isBuildMode())
1914
+ return;
1884
1915
  const cacheDir = path6.join(branchRoot, ".canopy-meta");
1885
1916
  const stalePath = path6.join(cacheDir, "schema-cache.stale");
1886
1917
  await fs6.mkdir(cacheDir, { recursive: true });
@@ -2694,18 +2725,6 @@ var loadBranchContext = async (options) => {
2694
2725
  };
2695
2726
  };
2696
2727
 
2697
- // dist/build-mode.js
2698
- var isDeployedStatic = (config) => {
2699
- return config.deployedAs === "static";
2700
- };
2701
- var STATIC_DEPLOY_USER = Object.freeze({
2702
- type: "authenticated",
2703
- userId: "__static_deploy__",
2704
- groups: ["Admins"],
2705
- email: "static-deploy@canopycms",
2706
- name: "Static Deploy"
2707
- });
2708
-
2709
2728
  // dist/git-manager.js
2710
2729
  import fs9 from "node:fs/promises";
2711
2730
  import path10 from "node:path";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "//": "@codemirror/language, @lezer/highlight: workaround — @mdxeditor/editor uses cm6-theme-basic-light which peer-requires these but mdxeditor doesn't declare them as dependencies",
3
3
  "name": "canopycms",
4
- "version": "0.0.22",
4
+ "version": "0.0.23",
5
5
  "description": "CanopyCMS core package: schema-driven content, branch-aware editing, and editor UI for Next.js.",
6
6
  "license": "MIT",
7
7
  "repository": {