canopycms 0.0.57 → 0.0.58
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.
- package/dist/ai/json-to-markdown.js +74 -3
- package/dist/ai/json-to-markdown.js.map +1 -1
- package/dist/api/__test__/mock-client.d.ts +9 -5
- package/dist/api/__test__/mock-client.d.ts.map +1 -1
- package/dist/api/__test__/mock-client.js +15 -7
- package/dist/api/__test__/mock-client.js.map +1 -1
- package/dist/api/assets.d.ts +100 -36
- package/dist/api/assets.d.ts.map +1 -1
- package/dist/api/assets.js +338 -51
- package/dist/api/assets.js.map +1 -1
- package/dist/api/client.d.ts +16 -5
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +24 -6
- package/dist/api/client.js.map +1 -1
- package/dist/api/entries.d.ts +4 -4
- package/dist/api/index.d.ts +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/route-builder.d.ts +9 -0
- package/dist/api/route-builder.d.ts.map +1 -1
- package/dist/api/route-builder.js +1 -0
- package/dist/api/route-builder.js.map +1 -1
- package/dist/api/schema.d.ts +4 -4
- package/dist/api/types.d.ts +11 -1
- package/dist/api/types.d.ts.map +1 -1
- package/dist/assets/asset-prefixes.d.ts +31 -0
- package/dist/assets/asset-prefixes.d.ts.map +1 -0
- package/dist/assets/asset-prefixes.js +20 -0
- package/dist/assets/asset-prefixes.js.map +1 -0
- package/dist/assets/asset-src.d.ts +23 -0
- package/dist/assets/asset-src.d.ts.map +1 -0
- package/dist/assets/asset-src.js +28 -0
- package/dist/assets/asset-src.js.map +1 -0
- package/dist/assets/asset-url.d.ts +35 -0
- package/dist/assets/asset-url.d.ts.map +1 -0
- package/dist/assets/asset-url.js +77 -0
- package/dist/assets/asset-url.js.map +1 -0
- package/dist/assets/factory.d.ts +18 -0
- package/dist/assets/factory.d.ts.map +1 -0
- package/dist/assets/factory.js +42 -0
- package/dist/assets/factory.js.map +1 -0
- package/dist/assets/finalize.d.ts +36 -0
- package/dist/assets/finalize.d.ts.map +1 -0
- package/dist/assets/finalize.js +72 -0
- package/dist/assets/finalize.js.map +1 -0
- package/dist/assets/index.d.ts +20 -0
- package/dist/assets/index.d.ts.map +1 -0
- package/dist/assets/index.js +19 -0
- package/dist/assets/index.js.map +1 -0
- package/dist/assets/keys.d.ts +56 -0
- package/dist/assets/keys.d.ts.map +1 -0
- package/dist/assets/keys.js +88 -0
- package/dist/assets/keys.js.map +1 -0
- package/dist/assets/pipeline.d.ts +50 -0
- package/dist/assets/pipeline.d.ts.map +1 -0
- package/dist/assets/pipeline.js +202 -0
- package/dist/assets/pipeline.js.map +1 -0
- package/dist/assets/store-local.d.ts +84 -0
- package/dist/assets/store-local.d.ts.map +1 -0
- package/dist/assets/store-local.js +254 -0
- package/dist/assets/store-local.js.map +1 -0
- package/dist/assets/store-s3.d.ts +71 -0
- package/dist/assets/store-s3.d.ts.map +1 -0
- package/dist/assets/store-s3.js +183 -0
- package/dist/assets/store-s3.js.map +1 -0
- package/dist/assets/svg-sanitizer.d.ts +37 -0
- package/dist/assets/svg-sanitizer.d.ts.map +1 -0
- package/dist/assets/svg-sanitizer.js +222 -0
- package/dist/assets/svg-sanitizer.js.map +1 -0
- package/dist/assets/transform-directives.d.ts +97 -0
- package/dist/assets/transform-directives.d.ts.map +1 -0
- package/dist/assets/transform-directives.js +267 -0
- package/dist/assets/transform-directives.js.map +1 -0
- package/dist/assets/transform.d.ts +51 -0
- package/dist/assets/transform.d.ts.map +1 -0
- package/dist/assets/transform.js +190 -0
- package/dist/assets/transform.js.map +1 -0
- package/dist/assets/types.d.ts +82 -0
- package/dist/assets/types.d.ts.map +1 -0
- package/dist/assets/types.js +10 -0
- package/dist/assets/types.js.map +1 -0
- package/dist/authorization/groups/schema.d.ts +2 -2
- package/dist/authorization/permissions/schema.d.ts +2 -2
- package/dist/cli/generate-ai-content.js +92 -7
- package/dist/cli/init.js +16 -4
- package/dist/config/helpers.d.ts.map +1 -1
- package/dist/config/helpers.js +2 -1
- package/dist/config/helpers.js.map +1 -1
- package/dist/config/index.d.ts +2 -2
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/schemas/config.d.ts +10 -0
- package/dist/config/schemas/config.d.ts.map +1 -1
- package/dist/config/schemas/field.d.ts +38 -3
- package/dist/config/schemas/field.d.ts.map +1 -1
- package/dist/config/schemas/field.js +18 -0
- package/dist/config/schemas/field.js.map +1 -1
- package/dist/config/schemas/media.d.ts +8 -0
- package/dist/config/schemas/media.d.ts.map +1 -1
- package/dist/config/schemas/media.js +9 -0
- package/dist/config/schemas/media.js.map +1 -1
- package/dist/config/types.d.ts +43 -3
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +4 -1
- package/dist/config/types.js.map +1 -1
- package/dist/editor/CanopyEditor.d.ts.map +1 -1
- package/dist/editor/CanopyEditor.js +1 -1
- package/dist/editor/CanopyEditor.js.map +1 -1
- package/dist/editor/Editor.d.ts +2 -0
- package/dist/editor/Editor.d.ts.map +1 -1
- package/dist/editor/Editor.js +82 -80
- package/dist/editor/Editor.js.map +1 -1
- package/dist/editor/FormRenderer.d.ts.map +1 -1
- package/dist/editor/FormRenderer.js +9 -0
- package/dist/editor/FormRenderer.js.map +1 -1
- package/dist/editor/components/EditorSidebar.d.ts +6 -1
- package/dist/editor/components/EditorSidebar.d.ts.map +1 -1
- package/dist/editor/components/EditorSidebar.js +4 -3
- package/dist/editor/components/EditorSidebar.js.map +1 -1
- package/dist/editor/context/AssetContext.d.ts +25 -0
- package/dist/editor/context/AssetContext.d.ts.map +1 -0
- package/dist/editor/context/AssetContext.js +26 -0
- package/dist/editor/context/AssetContext.js.map +1 -0
- package/dist/editor/context/index.d.ts +1 -0
- package/dist/editor/context/index.d.ts.map +1 -1
- package/dist/editor/context/index.js +1 -0
- package/dist/editor/context/index.js.map +1 -1
- package/dist/editor/fields/ImageField.d.ts +22 -0
- package/dist/editor/fields/ImageField.d.ts.map +1 -0
- package/dist/editor/fields/ImageField.js +100 -0
- package/dist/editor/fields/ImageField.js.map +1 -0
- package/dist/editor/fields/MarkdownField.d.ts.map +1 -1
- package/dist/editor/fields/MarkdownField.js +30 -4
- package/dist/editor/fields/MarkdownField.js.map +1 -1
- package/dist/editor/fields/MdxImageDialog.d.ts +16 -0
- package/dist/editor/fields/MdxImageDialog.d.ts.map +1 -0
- package/dist/editor/fields/MdxImageDialog.js +73 -0
- package/dist/editor/fields/MdxImageDialog.js.map +1 -0
- package/dist/editor/media/AssetCard.d.ts +21 -0
- package/dist/editor/media/AssetCard.d.ts.map +1 -0
- package/dist/editor/media/AssetCard.js +41 -0
- package/dist/editor/media/AssetCard.js.map +1 -0
- package/dist/editor/media/CropStep.d.ts +26 -0
- package/dist/editor/media/CropStep.d.ts.map +1 -0
- package/dist/editor/media/CropStep.js +38 -0
- package/dist/editor/media/CropStep.js.map +1 -0
- package/dist/editor/media/MediaLibrary.d.ts +22 -0
- package/dist/editor/media/MediaLibrary.d.ts.map +1 -0
- package/dist/editor/media/MediaLibrary.js +17 -0
- package/dist/editor/media/MediaLibrary.js.map +1 -0
- package/dist/editor/media/MediaLibraryBody.d.ts +17 -0
- package/dist/editor/media/MediaLibraryBody.d.ts.map +1 -0
- package/dist/editor/media/MediaLibraryBody.js +133 -0
- package/dist/editor/media/MediaLibraryBody.js.map +1 -0
- package/dist/editor/media/crop-math.d.ts +37 -0
- package/dist/editor/media/crop-math.d.ts.map +1 -0
- package/dist/editor/media/crop-math.js +62 -0
- package/dist/editor/media/crop-math.js.map +1 -0
- package/dist/editor/media/upload-asset.d.ts +31 -0
- package/dist/editor/media/upload-asset.d.ts.map +1 -0
- package/dist/editor/media/upload-asset.js +56 -0
- package/dist/editor/media/upload-asset.js.map +1 -0
- package/dist/editor/media/upload-constants.d.ts +27 -0
- package/dist/editor/media/upload-constants.d.ts.map +1 -0
- package/dist/editor/media/upload-constants.js +40 -0
- package/dist/editor/media/upload-constants.js.map +1 -0
- package/dist/editor/media/useAssetUpload.d.ts +19 -0
- package/dist/editor/media/useAssetUpload.d.ts.map +1 -0
- package/dist/editor/media/useAssetUpload.js +53 -0
- package/dist/editor/media/useAssetUpload.js.map +1 -0
- package/dist/editor/media/xhr-upload.d.ts +20 -0
- package/dist/editor/media/xhr-upload.d.ts.map +1 -0
- package/dist/editor/media/xhr-upload.js +42 -0
- package/dist/editor/media/xhr-upload.js.map +1 -0
- package/dist/editor/theme.d.ts +2 -1
- package/dist/editor/theme.d.ts.map +1 -1
- package/dist/editor/theme.js +1 -0
- package/dist/editor/theme.js.map +1 -1
- package/dist/entry-schema.d.ts +19 -0
- package/dist/entry-schema.d.ts.map +1 -1
- package/dist/entry-schema.js.map +1 -1
- package/dist/http/handler.d.ts +5 -2
- package/dist/http/handler.d.ts.map +1 -1
- package/dist/http/handler.js +13 -4
- package/dist/http/handler.js.map +1 -1
- package/dist/http/index.d.ts +2 -2
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +1 -1
- package/dist/http/index.js.map +1 -1
- package/dist/http/router.d.ts +14 -1
- package/dist/http/router.d.ts.map +1 -1
- package/dist/http/router.js +4 -1
- package/dist/http/router.js.map +1 -1
- package/dist/http/types.d.ts +40 -0
- package/dist/http/types.d.ts.map +1 -1
- package/dist/http/types.js +9 -0
- package/dist/http/types.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/schema/schema-store.d.ts +2 -2
- package/dist/server.d.ts +45 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +41 -0
- package/dist/server.js.map +1 -1
- package/dist/validation/entry-validator.d.ts.map +1 -1
- package/dist/validation/entry-validator.js +56 -1
- package/dist/validation/entry-validator.js.map +1 -1
- package/package.json +13 -1
- package/dist/asset-store.d.ts +0 -32
- package/dist/asset-store.d.ts.map +0 -1
- package/dist/asset-store.js +0 -85
- package/dist/asset-store.js.map +0 -1
package/dist/api/entries.d.ts
CHANGED
|
@@ -61,8 +61,8 @@ export declare const listEntries: import("./route-builder").RouteDefinition<z.Zo
|
|
|
61
61
|
branch: string & {
|
|
62
62
|
readonly __brand: "BranchName";
|
|
63
63
|
};
|
|
64
|
-
recursive?: boolean | undefined;
|
|
65
64
|
collection?: LogicalPath | undefined;
|
|
65
|
+
recursive?: boolean | undefined;
|
|
66
66
|
q?: string | undefined;
|
|
67
67
|
cursor?: string | undefined;
|
|
68
68
|
limit?: number | undefined;
|
|
@@ -70,8 +70,8 @@ export declare const listEntries: import("./route-builder").RouteDefinition<z.Zo
|
|
|
70
70
|
branch: string & {
|
|
71
71
|
readonly __brand: "BranchName";
|
|
72
72
|
};
|
|
73
|
-
recursive?: boolean | "true" | "false" | undefined;
|
|
74
73
|
collection?: LogicalPath | undefined;
|
|
74
|
+
recursive?: boolean | "true" | "false" | undefined;
|
|
75
75
|
q?: string | undefined;
|
|
76
76
|
cursor?: string | undefined;
|
|
77
77
|
limit?: number | undefined;
|
|
@@ -119,8 +119,8 @@ export declare const ENTRY_ROUTES: {
|
|
|
119
119
|
branch: string & {
|
|
120
120
|
readonly __brand: "BranchName";
|
|
121
121
|
};
|
|
122
|
-
recursive?: boolean | undefined;
|
|
123
122
|
collection?: LogicalPath | undefined;
|
|
123
|
+
recursive?: boolean | undefined;
|
|
124
124
|
q?: string | undefined;
|
|
125
125
|
cursor?: string | undefined;
|
|
126
126
|
limit?: number | undefined;
|
|
@@ -128,8 +128,8 @@ export declare const ENTRY_ROUTES: {
|
|
|
128
128
|
branch: string & {
|
|
129
129
|
readonly __brand: "BranchName";
|
|
130
130
|
};
|
|
131
|
-
recursive?: boolean | "true" | "false" | undefined;
|
|
132
131
|
collection?: LogicalPath | undefined;
|
|
132
|
+
recursive?: boolean | "true" | "false" | undefined;
|
|
133
133
|
q?: string | undefined;
|
|
134
134
|
cursor?: string | undefined;
|
|
135
135
|
limit?: number | undefined;
|
package/dist/api/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export type { CommentsResponse, AddCommentResponse, ResolveCommentResponse, List
|
|
|
5
5
|
export type { EntriesResponse, ListEntriesResponse, CollectionItem, ListEntriesParams, DeleteEntryResponse, } from './entries';
|
|
6
6
|
export type { PermissionsResponse, UpdatePermissionsBody, SearchUsersParams, GetUserMetadataResponse, GetUserMetadataParams, } from './permissions';
|
|
7
7
|
export type { UserInfoResponse } from './user';
|
|
8
|
-
export type { AssetsListResponse,
|
|
8
|
+
export type { AssetRecord, AssetsListResponse, PresignAssetResponse, PresignAssetBody, FinalizeAssetResponse, FinalizeAssetBody, AssetDeleteResponse, ListAssetsParams, DeleteAssetParams, } from './assets';
|
|
9
9
|
export type { InternalGroupsResponse, ExternalGroupsResponse, UpdateInternalGroupsBody, SearchExternalGroupsParams, ExternalGroup, } from './groups';
|
|
10
10
|
export type { ReferenceOptionsResponse } from './reference-options';
|
|
11
11
|
export type { ResolveReferencesResponse } from './resolve-references';
|
package/dist/api/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAClE,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,UAAU,CAAA;AACjB,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACzD,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,YAAY,CAAA;AACnB,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,WAAW,CAAA;AAClB,YAAY,EACV,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAC9C,YAAY,EACV,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAClE,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,UAAU,CAAA;AACjB,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACzD,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,YAAY,CAAA;AACnB,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,WAAW,CAAA;AAClB,YAAY,EACV,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAC9C,YAAY,EACV,WAAW,EACX,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,UAAU,CAAA;AACjB,YAAY,EACV,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,0BAA0B,EAC1B,aAAa,GACd,MAAM,UAAU,CAAA;AACjB,YAAY,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AACnE,YAAY,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAA;AACrE,YAAY,EACV,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,2BAA2B,EAC3B,2BAA2B,EAC3B,2BAA2B,EAC3B,uBAAuB,EACvB,0BAA0B,EAC1B,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,UAAU,CAAA;AACjB,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,8BAA8B,CAAA;AACrC,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAIjD,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAKpC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA"}
|
package/dist/api/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAiFA,mFAAmF;AAEnF,2BAA2B;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,4FAA4F;AAC5F,sEAAsE;AAEtE,gBAAgB;AAChB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA"}
|
|
@@ -54,6 +54,13 @@ export interface RouteDefinition<TParams extends z.ZodType | undefined = undefin
|
|
|
54
54
|
body?: TBody;
|
|
55
55
|
response: TResponse;
|
|
56
56
|
handler: RouteHandler<TParams, TBody, TResponse>;
|
|
57
|
+
/**
|
|
58
|
+
* Opt out of the core handler's default eager `req.json()` body parsing.
|
|
59
|
+
* See http/router.ts's `RouteDefinition.bodyFormat` for the full rationale
|
|
60
|
+
* - set this on routes that read a non-JSON body themselves (e.g. the
|
|
61
|
+
* proxied multipart asset upload).
|
|
62
|
+
*/
|
|
63
|
+
bodyFormat?: 'multipart';
|
|
57
64
|
buildPath: TParams extends z.ZodType ? (params: z.infer<TParams>) => string : () => string;
|
|
58
65
|
validate: (extracted: {
|
|
59
66
|
params?: Record<string, string>;
|
|
@@ -95,6 +102,8 @@ interface EndpointConfigBase<TParams extends z.ZodType | undefined, TBody extend
|
|
|
95
102
|
response: unknown;
|
|
96
103
|
defaultMockData?: unknown;
|
|
97
104
|
mockDataCasts?: MockDataCasts;
|
|
105
|
+
/** See `RouteDefinition['bodyFormat']` above. */
|
|
106
|
+
bodyFormat?: 'multipart';
|
|
98
107
|
}
|
|
99
108
|
/** Config for an endpoint without guards */
|
|
100
109
|
interface UnguardedEndpointConfig<TParams extends z.ZodType | undefined, TBody extends z.ZodType | undefined, TResponse> extends EndpointConfigBase<TParams, TBody> {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-builder.d.ts","sourceRoot":"","sources":["../../src/api/route-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAC5B,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACrD,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,mBAAmB,EAAiB,MAAM,UAAU,CAAA;AAEhF;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAChC,MAAM,EACN,mBAAmB,GAAG,oBAAoB,GAAG,cAAc,CAC5D,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAA;IACnD,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,CAAC,EAAE,CAAC,CAAC,OAAO,CAAA;IACxB,UAAU,CAAC,EAAE,CAAC,CAAC,OAAO,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,aAAa,CAAA;CAC9B;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,aAAa,EAAO,CAAA;AAEjD;;;;;;GAMG;AACH,MAAM,WAAW,eAAe,CAC9B,OAAO,SAAS,CAAC,CAAC,OAAO,GAAG,SAAS,GAAG,SAAS,EACjD,KAAK,SAAS,CAAC,CAAC,OAAO,GAAG,SAAS,GAAG,SAAS,EAC/C,SAAS,GAAG,OAAO;IAEnB,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAA;IACnD,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,KAAK,CAAA;IACZ,QAAQ,EAAE,SAAS,CAAA;IACnB,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"route-builder.d.ts","sourceRoot":"","sources":["../../src/api/route-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-builder.js","sourceRoot":"","sources":["../../src/api/route-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAA0C,aAAa,EAAE,MAAM,UAAU,CAAA;AA+BhF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAoB,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"route-builder.js","sourceRoot":"","sources":["../../src/api/route-builder.ts"],"names":[],"mappings":"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"}
|
package/dist/api/schema.d.ts
CHANGED
|
@@ -357,14 +357,14 @@ export declare const updateEntryType: import("./route-builder").RouteDefinition<
|
|
|
357
357
|
maxItems: z.ZodOptional<z.ZodNumber>;
|
|
358
358
|
}, "strip", z.ZodTypeAny, {
|
|
359
359
|
default?: boolean | undefined;
|
|
360
|
-
label?: string | undefined;
|
|
361
360
|
format?: "mdx" | "md" | "json" | "yaml" | undefined;
|
|
361
|
+
label?: string | undefined;
|
|
362
362
|
schema?: string | undefined;
|
|
363
363
|
maxItems?: number | undefined;
|
|
364
364
|
}, {
|
|
365
365
|
default?: boolean | undefined;
|
|
366
|
-
label?: string | undefined;
|
|
367
366
|
format?: "mdx" | "md" | "json" | "yaml" | undefined;
|
|
367
|
+
label?: string | undefined;
|
|
368
368
|
schema?: string | undefined;
|
|
369
369
|
maxItems?: number | undefined;
|
|
370
370
|
}>, UpdateEntryTypeApiResponse>;
|
|
@@ -646,14 +646,14 @@ export declare const SCHEMA_ROUTES: {
|
|
|
646
646
|
maxItems: z.ZodOptional<z.ZodNumber>;
|
|
647
647
|
}, "strip", z.ZodTypeAny, {
|
|
648
648
|
default?: boolean | undefined;
|
|
649
|
-
label?: string | undefined;
|
|
650
649
|
format?: "mdx" | "md" | "json" | "yaml" | undefined;
|
|
650
|
+
label?: string | undefined;
|
|
651
651
|
schema?: string | undefined;
|
|
652
652
|
maxItems?: number | undefined;
|
|
653
653
|
}, {
|
|
654
654
|
default?: boolean | undefined;
|
|
655
|
-
label?: string | undefined;
|
|
656
655
|
format?: "mdx" | "md" | "json" | "yaml" | undefined;
|
|
656
|
+
label?: string | undefined;
|
|
657
657
|
schema?: string | undefined;
|
|
658
658
|
maxItems?: number | undefined;
|
|
659
659
|
}>, UpdateEntryTypeApiResponse>;
|
package/dist/api/types.d.ts
CHANGED
|
@@ -2,7 +2,8 @@ import type { BranchContext } from '../types';
|
|
|
2
2
|
import type { AuthPlugin } from '../auth/plugin';
|
|
3
3
|
import type { CanopyServices } from '../services';
|
|
4
4
|
import type { CanopyUser } from '../user';
|
|
5
|
-
import type { AssetStore } from '../
|
|
5
|
+
import type { AssetStore } from '../assets/types';
|
|
6
|
+
import type { CanopyRequest } from '../http/types';
|
|
6
7
|
export interface ApiContext {
|
|
7
8
|
services: CanopyServices;
|
|
8
9
|
assetStore?: AssetStore;
|
|
@@ -27,6 +28,15 @@ export interface ApiRequest<TBody = unknown> {
|
|
|
27
28
|
body?: TBody;
|
|
28
29
|
query?: Record<string, string | string[] | undefined>;
|
|
29
30
|
user: CanopyUser;
|
|
31
|
+
/**
|
|
32
|
+
* The underlying framework-agnostic request, for handlers that must bypass
|
|
33
|
+
* the default JSON body parsing (e.g. multipart/form-data uploads - see
|
|
34
|
+
* `bodyFormat: 'multipart'` in route-builder.ts and `rawRequest.formData()`
|
|
35
|
+
* / `rawRequest.rawBody()`). Always populated by the core handler; optional
|
|
36
|
+
* only so hand-built `ApiRequest` test fixtures that don't need it keep
|
|
37
|
+
* compiling.
|
|
38
|
+
*/
|
|
39
|
+
rawRequest?: CanopyRequest;
|
|
30
40
|
}
|
|
31
41
|
export interface ApiResponse<TData = unknown> {
|
|
32
42
|
ok: boolean;
|
package/dist/api/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAElD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,cAAc,CAAA;IACxB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB;;;;;;;OAOG;IACH,gBAAgB,EAAE,CAChB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,KAC/B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IAClC;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,CAAA;CACxB;AAED,MAAM,WAAW,UAAU,CAAC,KAAK,GAAG,OAAO;IACzC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,KAAK,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAA;IACrD,IAAI,EAAE,UAAU,CAAA;IAChB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,aAAa,CAAA;CAC3B;AAED,MAAM,WAAW,WAAW,CAAC,KAAK,GAAG,OAAO;IAC1C,EAAE,EAAE,OAAO,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,KAAK,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;;OAKG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC5D"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The five S3/local bucket-prefix strings (see keys.ts's module doc for the
|
|
3
|
+
* full layout: asset-originals/, asset-staging/, asset-meta/, assets/t/,
|
|
4
|
+
* assets/).
|
|
5
|
+
*
|
|
6
|
+
* Split into its own dependency-free file so client-safe, isomorphic modules
|
|
7
|
+
* (transform-directives.ts, asset-url.ts) can import the prefix strings
|
|
8
|
+
* directly without pulling keys.ts's `node:crypto` import (used only by
|
|
9
|
+
* `hashBytes`) into a browser bundle. keys.ts re-exports `ASSET_PREFIXES`
|
|
10
|
+
* from here so existing imports of it from './keys' keep working unchanged.
|
|
11
|
+
*/
|
|
12
|
+
export declare const ASSET_PREFIXES: {
|
|
13
|
+
readonly originals: "asset-originals";
|
|
14
|
+
readonly staging: "asset-staging";
|
|
15
|
+
readonly meta: "asset-meta";
|
|
16
|
+
readonly public: "assets";
|
|
17
|
+
/** Transform-output prefix; directive-aware key building lives in transform-directives.ts. */
|
|
18
|
+
readonly transform: "assets/t";
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Widened to plain `string` fields (not `typeof ASSET_PREFIXES`'s literal
|
|
22
|
+
* types) so overriding stores can supply their own prefix strings.
|
|
23
|
+
*/
|
|
24
|
+
export interface AssetPrefixes {
|
|
25
|
+
originals: string;
|
|
26
|
+
staging: string;
|
|
27
|
+
meta: string;
|
|
28
|
+
public: string;
|
|
29
|
+
transform: string;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=asset-prefixes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-prefixes.d.ts","sourceRoot":"","sources":["../../src/assets/asset-prefixes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,cAAc;;;;;IAKzB,8FAA8F;;CAEtF,CAAA;AAEV;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;CAClB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The five S3/local bucket-prefix strings (see keys.ts's module doc for the
|
|
3
|
+
* full layout: asset-originals/, asset-staging/, asset-meta/, assets/t/,
|
|
4
|
+
* assets/).
|
|
5
|
+
*
|
|
6
|
+
* Split into its own dependency-free file so client-safe, isomorphic modules
|
|
7
|
+
* (transform-directives.ts, asset-url.ts) can import the prefix strings
|
|
8
|
+
* directly without pulling keys.ts's `node:crypto` import (used only by
|
|
9
|
+
* `hashBytes`) into a browser bundle. keys.ts re-exports `ASSET_PREFIXES`
|
|
10
|
+
* from here so existing imports of it from './keys.js' keep working unchanged.
|
|
11
|
+
*/
|
|
12
|
+
export const ASSET_PREFIXES = {
|
|
13
|
+
originals: 'asset-originals',
|
|
14
|
+
staging: 'asset-staging',
|
|
15
|
+
meta: 'asset-meta',
|
|
16
|
+
public: 'assets',
|
|
17
|
+
/** Transform-output prefix; directive-aware key building lives in transform-directives.ts. */
|
|
18
|
+
transform: 'assets/t',
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=asset-prefixes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-prefixes.js","sourceRoot":"","sources":["../../src/assets/asset-prefixes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,SAAS,EAAE,iBAAiB;IAC5B,OAAO,EAAE,eAAe;IACxB,IAAI,EAAE,YAAY;IAClB,MAAM,EAAE,QAAQ;IAChB,8FAA8F;IAC9F,SAAS,EAAE,UAAU;CACb,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compute the root-relative public URL for an asset's meta. Shared helper -
|
|
3
|
+
* both the API layer (list/finalize responses) and later PRs (structured
|
|
4
|
+
* image field, MediaLibrary, `assetUrl()`) build URLs through this so the
|
|
5
|
+
* URL shape is defined in exactly one place.
|
|
6
|
+
*
|
|
7
|
+
* svg/pdf: served statically from the public object finalize wrote
|
|
8
|
+
* (`assets/{hash32}/{slug}.{ext}`, via keys.ts's `publicKey`).
|
|
9
|
+
*
|
|
10
|
+
* raster: served through the transform layer using the `orig` (identity)
|
|
11
|
+
* directive. The transform engine itself is PR 4's job, but the URL shape is
|
|
12
|
+
* decided now (rather than switching every raster URL over once transforms
|
|
13
|
+
* ship) so content written by this PR stays valid without a migration.
|
|
14
|
+
*
|
|
15
|
+
* Always root-relative - `media.publicBaseUrl` is editor-display-only (PR 6's
|
|
16
|
+
* concern) and must never be baked into stored/served content URLs.
|
|
17
|
+
*/
|
|
18
|
+
import { IDENTITY_TRANSFORM_DIRECTIVE } from './transform-directives';
|
|
19
|
+
import type { AssetMeta } from './types';
|
|
20
|
+
/** Re-exported for existing importers (assets/index.ts barrel) - the value now lives in transform-directives.ts, PR 4's pure directive module, so it's reachable without pulling keys.ts's node:crypto import into client bundles. */
|
|
21
|
+
export { IDENTITY_TRANSFORM_DIRECTIVE };
|
|
22
|
+
export declare function assetSrc(meta: Pick<AssetMeta, 'hash32' | 'slug' | 'ext' | 'kind'>): string;
|
|
23
|
+
//# sourceMappingURL=asset-src.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-src.d.ts","sourceRoot":"","sources":["../../src/assets/asset-src.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAA;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC,sOAAsO;AACtO,OAAO,EAAE,4BAA4B,EAAE,CAAA;AAEvC,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC,GAAG,MAAM,CAK1F"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compute the root-relative public URL for an asset's meta. Shared helper -
|
|
3
|
+
* both the API layer (list/finalize responses) and later PRs (structured
|
|
4
|
+
* image field, MediaLibrary, `assetUrl()`) build URLs through this so the
|
|
5
|
+
* URL shape is defined in exactly one place.
|
|
6
|
+
*
|
|
7
|
+
* svg/pdf: served statically from the public object finalize wrote
|
|
8
|
+
* (`assets/{hash32}/{slug}.{ext}`, via keys.ts's `publicKey`).
|
|
9
|
+
*
|
|
10
|
+
* raster: served through the transform layer using the `orig` (identity)
|
|
11
|
+
* directive. The transform engine itself is PR 4's job, but the URL shape is
|
|
12
|
+
* decided now (rather than switching every raster URL over once transforms
|
|
13
|
+
* ship) so content written by this PR stays valid without a migration.
|
|
14
|
+
*
|
|
15
|
+
* Always root-relative - `media.publicBaseUrl` is editor-display-only (PR 6's
|
|
16
|
+
* concern) and must never be baked into stored/served content URLs.
|
|
17
|
+
*/
|
|
18
|
+
import { ASSET_PREFIXES } from './asset-prefixes.js';
|
|
19
|
+
import { IDENTITY_TRANSFORM_DIRECTIVE } from './transform-directives.js';
|
|
20
|
+
/** Re-exported for existing importers (assets/index.ts barrel) - the value now lives in transform-directives.ts, PR 4's pure directive module, so it's reachable without pulling keys.ts's node:crypto import into client bundles. */
|
|
21
|
+
export { IDENTITY_TRANSFORM_DIRECTIVE };
|
|
22
|
+
export function assetSrc(meta) {
|
|
23
|
+
if (meta.kind === 'svg' || meta.kind === 'pdf') {
|
|
24
|
+
return `/${ASSET_PREFIXES.public}/${meta.hash32}/${meta.slug}.${meta.ext}`;
|
|
25
|
+
}
|
|
26
|
+
return `/${ASSET_PREFIXES.transform}/${IDENTITY_TRANSFORM_DIRECTIVE}/${meta.hash32}/${meta.slug}.${meta.ext}`;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=asset-src.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-src.js","sourceRoot":"","sources":["../../src/assets/asset-src.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAA;AAGrE,sOAAsO;AACtO,OAAO,EAAE,4BAA4B,EAAE,CAAA;AAEvC,MAAM,UAAU,QAAQ,CAAC,IAAyD;IAChF,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC/C,OAAO,IAAI,cAAc,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,CAAA;IAC5E,CAAC;IACD,OAAO,IAAI,cAAc,CAAC,SAAS,IAAI,4BAA4B,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,CAAA;AAC/G,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build/adjust transform URLs for `<img>`/srcset without pulling in the
|
|
3
|
+
* server-only transform engine. Isomorphic - only depends on
|
|
4
|
+
* transform-directives.ts and the plain `ASSET_PREFIXES` constant, neither
|
|
5
|
+
* of which import node builtins, so this is safe to import from client
|
|
6
|
+
* (editor) code as well as during static builds.
|
|
7
|
+
*/
|
|
8
|
+
import { type CropRect, type OutputFormat } from './transform-directives';
|
|
9
|
+
/** The minimal shape `assetUrl`/`assetSrcSet` need from a stored asset reference. */
|
|
10
|
+
export interface AssetRef {
|
|
11
|
+
src: string;
|
|
12
|
+
}
|
|
13
|
+
export interface AssetUrlOptions {
|
|
14
|
+
width?: number;
|
|
15
|
+
format?: OutputFormat;
|
|
16
|
+
quality?: number;
|
|
17
|
+
crop?: CropRect;
|
|
18
|
+
/** Prefixed onto the result, e.g. `media.publicBaseUrl` when the editor is served from a different origin than the site. */
|
|
19
|
+
baseUrl?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Build a transform URL, merging `opts` over the directives already present
|
|
23
|
+
* in `ref.src` (opts win). For static srcs (svg/pdf under `/assets/{hash}/...`,
|
|
24
|
+
* or any src that isn't one of our own transform URLs) the src is returned
|
|
25
|
+
* unchanged and `opts` are ignored - there is nothing to transform.
|
|
26
|
+
*/
|
|
27
|
+
export declare function assetUrl(ref: AssetRef, opts?: AssetUrlOptions): string;
|
|
28
|
+
/**
|
|
29
|
+
* Build a comma-joined `url w` srcset descriptor list. `widths` must all be
|
|
30
|
+
* on the transform width allowlist (multiples of 160 in [160, 4096]) - this
|
|
31
|
+
* is developer-facing (a host app's own responsive-image markup), so an
|
|
32
|
+
* invalid width throws rather than silently dropping it.
|
|
33
|
+
*/
|
|
34
|
+
export declare function assetSrcSet(ref: AssetRef, widths: readonly number[], opts?: Omit<AssetUrlOptions, 'width'>): string;
|
|
35
|
+
//# sourceMappingURL=asset-url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-url.d.ts","sourceRoot":"","sources":["../../src/assets/asset-url.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAIL,KAAK,QAAQ,EACb,KAAK,YAAY,EAElB,MAAM,wBAAwB,CAAA;AAE/B,qFAAqF;AACrF,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,4HAA4H;IAC5H,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AA+BD;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,GAAE,eAAoB,GAAG,MAAM,CAuB1E;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,QAAQ,EACb,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,IAAI,GAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAM,GACxC,MAAM,CAWR"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build/adjust transform URLs for `<img>`/srcset without pulling in the
|
|
3
|
+
* server-only transform engine. Isomorphic - only depends on
|
|
4
|
+
* transform-directives.ts and the plain `ASSET_PREFIXES` constant, neither
|
|
5
|
+
* of which import node builtins, so this is safe to import from client
|
|
6
|
+
* (editor) code as well as during static builds.
|
|
7
|
+
*/
|
|
8
|
+
import { ASSET_PREFIXES } from './asset-prefixes.js';
|
|
9
|
+
import { formatDirectives, isAllowedTransformWidth, parseTransformPath, } from './transform-directives.js';
|
|
10
|
+
const TRANSFORM_URL_PREFIX = `/${ASSET_PREFIXES.transform}/`;
|
|
11
|
+
function joinBaseUrl(baseUrl, urlPath) {
|
|
12
|
+
if (!baseUrl)
|
|
13
|
+
return urlPath;
|
|
14
|
+
const trimmedBase = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;
|
|
15
|
+
const trimmedPath = urlPath.startsWith('/') ? urlPath : `/${urlPath}`;
|
|
16
|
+
return `${trimmedBase}${trimmedPath}`;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Merge `opts` over an already-parsed directive set - opts win when given,
|
|
20
|
+
* otherwise the existing value (if any) carries over. Returns `undefined`
|
|
21
|
+
* fields as "unset" (there is no way to explicitly clear a directive via
|
|
22
|
+
* opts - only to override it).
|
|
23
|
+
*/
|
|
24
|
+
function mergeDirectives(current, opts) {
|
|
25
|
+
const existing = current.identity ? undefined : current;
|
|
26
|
+
const width = opts.width ?? existing?.width;
|
|
27
|
+
const format = opts.format ?? existing?.format;
|
|
28
|
+
const quality = opts.quality ?? existing?.quality;
|
|
29
|
+
const crop = opts.crop ?? existing?.crop;
|
|
30
|
+
if (width === undefined && format === undefined && quality === undefined && crop === undefined) {
|
|
31
|
+
return { identity: true };
|
|
32
|
+
}
|
|
33
|
+
return { identity: false, width, format, quality, crop };
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Build a transform URL, merging `opts` over the directives already present
|
|
37
|
+
* in `ref.src` (opts win). For static srcs (svg/pdf under `/assets/{hash}/...`,
|
|
38
|
+
* or any src that isn't one of our own transform URLs) the src is returned
|
|
39
|
+
* unchanged and `opts` are ignored - there is nothing to transform.
|
|
40
|
+
*/
|
|
41
|
+
export function assetUrl(ref, opts = {}) {
|
|
42
|
+
const { src } = ref;
|
|
43
|
+
if (!src.startsWith(TRANSFORM_URL_PREFIX)) {
|
|
44
|
+
return joinBaseUrl(opts.baseUrl, src);
|
|
45
|
+
}
|
|
46
|
+
const rest = src.slice(TRANSFORM_URL_PREFIX.length);
|
|
47
|
+
const parsed = parseTransformPath(rest.split('/'));
|
|
48
|
+
if (!parsed.ok) {
|
|
49
|
+
// Malformed src (shouldn't happen for a src canopycms itself wrote) -
|
|
50
|
+
// nothing sensible to merge onto, so return it unchanged rather than throw.
|
|
51
|
+
return joinBaseUrl(opts.baseUrl, src);
|
|
52
|
+
}
|
|
53
|
+
const merged = mergeDirectives(parsed.directives, opts);
|
|
54
|
+
// Ext follows the format: an explicit format (new or carried over) always
|
|
55
|
+
// wins; with no format at all, the ext must keep preserving the source's
|
|
56
|
+
// real extension, which is exactly what `parsed.ext` already is here.
|
|
57
|
+
const ext = !merged.identity && merged.format !== undefined ? merged.format : parsed.ext;
|
|
58
|
+
const newSrc = `${TRANSFORM_URL_PREFIX}${formatDirectives(merged)}/${parsed.hash32}/${parsed.slug}.${ext}`;
|
|
59
|
+
return joinBaseUrl(opts.baseUrl, newSrc);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Build a comma-joined `url w` srcset descriptor list. `widths` must all be
|
|
63
|
+
* on the transform width allowlist (multiples of 160 in [160, 4096]) - this
|
|
64
|
+
* is developer-facing (a host app's own responsive-image markup), so an
|
|
65
|
+
* invalid width throws rather than silently dropping it.
|
|
66
|
+
*/
|
|
67
|
+
export function assetSrcSet(ref, widths, opts = {}) {
|
|
68
|
+
return widths
|
|
69
|
+
.map((width) => {
|
|
70
|
+
if (!isAllowedTransformWidth(width)) {
|
|
71
|
+
throw new Error(`assetSrcSet: width ${width} is not allowed (must be a multiple of 160 between 160 and 4096)`);
|
|
72
|
+
}
|
|
73
|
+
return `${assetUrl(ref, { ...opts, width })} ${width}w`;
|
|
74
|
+
})
|
|
75
|
+
.join(', ');
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=asset-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-url.js","sourceRoot":"","sources":["../../src/assets/asset-url.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Instantiate the configured AssetStore from a site's `media` config.
|
|
3
|
+
*
|
|
4
|
+
* This is the one place that turns the (currently-unconsumed) `media` config
|
|
5
|
+
* into a real store — see .claude/future-tasks/assets-media-system.md for why
|
|
6
|
+
* this was previously dead configuration.
|
|
7
|
+
*/
|
|
8
|
+
import type { MediaConfig } from '../config/types';
|
|
9
|
+
import type { AssetStore } from './types';
|
|
10
|
+
/**
|
|
11
|
+
* @param media - The site's `media` config (`config.media`), or undefined if unset.
|
|
12
|
+
* @param opts.devAssetsDir - Root directory for the implicit local fallback store used
|
|
13
|
+
* when `media` is undefined, or when `adapter: 'local'` omits `directory`.
|
|
14
|
+
*/
|
|
15
|
+
export declare function createAssetStore(media: MediaConfig | undefined, opts?: {
|
|
16
|
+
devAssetsDir?: string;
|
|
17
|
+
}): AssetStore | undefined;
|
|
18
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/assets/factory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAGlD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,GAAG,SAAS,EAC9B,IAAI,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GACnC,UAAU,GAAG,SAAS,CA2BxB"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Instantiate the configured AssetStore from a site's `media` config.
|
|
3
|
+
*
|
|
4
|
+
* This is the one place that turns the (currently-unconsumed) `media` config
|
|
5
|
+
* into a real store — see .claude/future-tasks/assets-media-system.md for why
|
|
6
|
+
* this was previously dead configuration.
|
|
7
|
+
*/
|
|
8
|
+
import { LocalAssetStore } from './store-local.js';
|
|
9
|
+
import { S3AssetStore } from './store-s3.js';
|
|
10
|
+
/**
|
|
11
|
+
* @param media - The site's `media` config (`config.media`), or undefined if unset.
|
|
12
|
+
* @param opts.devAssetsDir - Root directory for the implicit local fallback store used
|
|
13
|
+
* when `media` is undefined, or when `adapter: 'local'` omits `directory`.
|
|
14
|
+
*/
|
|
15
|
+
export function createAssetStore(media, opts = {}) {
|
|
16
|
+
if (!media) {
|
|
17
|
+
return opts.devAssetsDir ? new LocalAssetStore({ root: opts.devAssetsDir }) : undefined;
|
|
18
|
+
}
|
|
19
|
+
switch (media.adapter) {
|
|
20
|
+
case 's3':
|
|
21
|
+
return new S3AssetStore({
|
|
22
|
+
bucket: media.bucket,
|
|
23
|
+
region: media.region,
|
|
24
|
+
publicBaseUrl: media.publicBaseUrl,
|
|
25
|
+
maxUploadBytes: media.maxUploadBytes,
|
|
26
|
+
});
|
|
27
|
+
case 'local': {
|
|
28
|
+
const root = media.directory ?? opts.devAssetsDir;
|
|
29
|
+
return root ? new LocalAssetStore({ root }) : undefined;
|
|
30
|
+
}
|
|
31
|
+
case 'lfs':
|
|
32
|
+
// Config literal kept for forward compatibility; no lfs adapter is
|
|
33
|
+
// implemented yet (see BACKLOG.md "Asset adapters").
|
|
34
|
+
return undefined;
|
|
35
|
+
default:
|
|
36
|
+
// Defensive: mediaSchema is a closed discriminated union, so this is
|
|
37
|
+
// unreachable via validated config, but guards against an unrecognized
|
|
38
|
+
// adapter string reaching here some other way.
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/assets/factory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAGzC;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAA8B,EAC9B,OAAkC,EAAE;IAEpC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACzF,CAAC;IAED,QAAQ,KAAK,CAAC,OAAO,EAAE,CAAC;QACtB,KAAK,IAAI;YACP,OAAO,IAAI,YAAY,CAAC;gBACtB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,cAAc,EAAE,KAAK,CAAC,cAAc;aACrC,CAAC,CAAA;QACJ,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,CAAA;YACjD,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACzD,CAAC;QACD,KAAK,KAAK;YACR,mEAAmE;YACnE,qDAAqD;YACrD,OAAO,SAAS,CAAA;QAClB;YACE,qEAAqE;YACrE,uEAAuE;YACvE,+CAA+C;YAC/C,OAAO,SAAS,CAAA;IACpB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Store orchestration around the (pure) finalize pipeline: dedup, write, and
|
|
3
|
+
* best-effort staging cleanup. Split from pipeline.ts so the pipeline itself
|
|
4
|
+
* stays store-agnostic and trivially unit-testable with plain byte fixtures.
|
|
5
|
+
*/
|
|
6
|
+
import { type FinalizeInput, type FinalizeRejection } from './pipeline';
|
|
7
|
+
import type { AssetMeta, AssetStore } from './types';
|
|
8
|
+
export declare function isValidStagingKey(key: string): boolean;
|
|
9
|
+
export type FinalizeAssetResult = {
|
|
10
|
+
ok: true;
|
|
11
|
+
meta: AssetMeta;
|
|
12
|
+
} | FinalizeRejection;
|
|
13
|
+
/**
|
|
14
|
+
* Run the finalize pipeline over raw bytes and persist the result.
|
|
15
|
+
*
|
|
16
|
+
* Order matters here too: dedup FIRST (after hashing, inside the pipeline) -
|
|
17
|
+
* if an identical blob already exists, return the existing meta and skip all
|
|
18
|
+
* writes entirely (first-name-wins). Otherwise write the original, then the
|
|
19
|
+
* optional public object, then `putMetaIfAbsent` LAST: meta is the commit
|
|
20
|
+
* point for an asset's existence, so a crash between `putOriginal` and here
|
|
21
|
+
* leaves only orphaned (harmless, content-addressed) blobs, never a meta
|
|
22
|
+
* record pointing at a missing blob.
|
|
23
|
+
*/
|
|
24
|
+
export declare function finalizeAsset(store: AssetStore, input: FinalizeInput): Promise<FinalizeAssetResult>;
|
|
25
|
+
/**
|
|
26
|
+
* Finalize a previously-staged upload: read the staged bytes, run
|
|
27
|
+
* `finalizeAsset`, and best-effort delete the staging object regardless of
|
|
28
|
+
* outcome (success OR pipeline rejection - a rejected upload's staged bytes
|
|
29
|
+
* are just as much litter as an accepted one's).
|
|
30
|
+
*/
|
|
31
|
+
export declare function finalizeStagedUpload(store: AssetStore, stagingKey: string, filename: string, uploadedBy?: string): Promise<FinalizeAssetResult | {
|
|
32
|
+
ok: false;
|
|
33
|
+
status: 400 | 404;
|
|
34
|
+
error: string;
|
|
35
|
+
}>;
|
|
36
|
+
//# sourceMappingURL=finalize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finalize.d.ts","sourceRoot":"","sources":["../../src/assets/finalize.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAuB,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE5F,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAYpD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGtD;AAED,MAAM,MAAM,mBAAmB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAAG,iBAAiB,CAAA;AAEnF;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,mBAAmB,CAAC,CAuB9B;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAYhF"}
|