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;
|
|
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
|
-
|
|
76
|
-
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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
|
-
|
|
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
|
-
|
|
106
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
await fs.
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,IAAI,MAAM,WAAW,CAAA;AAM5B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;
|
|
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
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
const
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
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
|
-
}
|
|
1852
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
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.
|
|
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": {
|