@coreframe/scripts 0.1.49 → 0.1.50
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/coreframe.d.ts +233 -41
- package/dist/coreframe.js +13 -2
- package/package.json +16 -30
- package/dist/_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/usingCtx.js +0 -1
- package/dist/assets/contracts.d.ts +0 -187
- package/dist/assets/contracts.js +0 -1
- package/dist/assets/credentials.d.ts +0 -35
- package/dist/assets/credentials.js +0 -1
- package/dist/assets/images.d.ts +0 -32
- package/dist/assets/images.js +0 -1
- package/dist/assets/media.d.ts +0 -42
- package/dist/assets/media.js +0 -1
- package/dist/assets/project.d.ts +0 -54
- package/dist/assets/project.js +0 -3
- package/dist/assets/storage.d.ts +0 -60
- package/dist/assets/storage.js +0 -1
- package/dist/assets/workflows.d.ts +0 -69
- package/dist/assets/workflows.js +0 -1
- package/dist/assets.d.ts +0 -4
- package/dist/assets.js +0 -1
- package/dist/config.d.ts +0 -49
- package/dist/config.js +0 -1
- package/dist/db/apply-seed.d.ts +0 -8
- package/dist/db/apply-seed.js +0 -1
- package/dist/db/client.d.ts +0 -30
- package/dist/db/client.js +0 -1
- package/dist/db/config.d.ts +0 -24
- package/dist/db/config.js +0 -1
- package/dist/db/drizzle-kit.d.ts +0 -10
- package/dist/db/drizzle-kit.js +0 -2
- package/dist/db/ensure.d.ts +0 -9
- package/dist/db/ensure.js +0 -2
- package/dist/db/error.d.ts +0 -4
- package/dist/db/error.js +0 -1
- package/dist/db/local-postgres.d.ts +0 -65
- package/dist/db/local-postgres.js +0 -1
- package/dist/db/migrate-held.d.ts +0 -16
- package/dist/db/migrate-held.js +0 -10
- package/dist/db/migrate.d.ts +0 -9
- package/dist/db/migrate.js +0 -2
- package/dist/db/project.d.ts +0 -23
- package/dist/db/project.js +0 -1
- package/dist/db/reset.d.ts +0 -9
- package/dist/db/reset.js +0 -2
- package/dist/db/schema-check.d.ts +0 -11
- package/dist/db/schema-check.js +0 -2
- package/dist/db/schema-push.d.ts +0 -22
- package/dist/db/schema-push.js +0 -1
- package/dist/db/seed.d.ts +0 -19
- package/dist/db/seed.js +0 -2
- package/dist/db/setup.d.ts +0 -11
- package/dist/db/setup.js +0 -2
- package/dist/deploy/access-token-secret.d.ts +0 -39
- package/dist/deploy/access-token-secret.js +0 -1
- package/dist/deploy/check-migrations.d.ts +0 -4
- package/dist/deploy/check-migrations.js +0 -2
- package/dist/deploy/checks.d.ts +0 -8
- package/dist/deploy/checks.js +0 -1
- package/dist/deploy/config.d.ts +0 -68
- package/dist/deploy/config.js +0 -1
- package/dist/deploy/migrations.d.ts +0 -24
- package/dist/deploy/migrations.js +0 -4
- package/dist/deploy/pending-migrations.d.ts +0 -9
- package/dist/deploy/pending-migrations.js +0 -1
- package/dist/deploy/tauri-release.d.ts +0 -106
- package/dist/deploy/tauri-release.js +0 -1
- package/dist/deploy/version.d.ts +0 -24
- package/dist/deploy/version.js +0 -1
- package/dist/deploy.d.ts +0 -21
- package/dist/deploy.js +0 -3
- package/dist/dev-device.d.ts +0 -34
- package/dist/dev-device.js +0 -1
- package/dist/dev-https.d.ts +0 -17
- package/dist/dev-https.js +0 -1
- package/dist/dev-lock.d.ts +0 -28
- package/dist/dev-lock.js +0 -1
- package/dist/dev-timing.d.ts +0 -25
- package/dist/dev-timing.js +0 -1
- package/dist/dev.d.ts +0 -39
- package/dist/dev.js +0 -3
- package/dist/environment.d.ts +0 -27
- package/dist/environment.js +0 -1
- package/dist/i18n/catalogs.d.ts +0 -60
- package/dist/i18n/catalogs.js +0 -1
- package/dist/i18n/contracts.d.ts +0 -60
- package/dist/i18n/contracts.js +0 -1
- package/dist/i18n/paths.d.ts +0 -12
- package/dist/i18n/paths.js +0 -1
- package/dist/i18n/storage.d.ts +0 -117
- package/dist/i18n/storage.js +0 -1
- package/dist/i18n/workflows.d.ts +0 -46
- package/dist/i18n/workflows.js +0 -1
- package/dist/managed-dev-protocol.d.ts +0 -135
- package/dist/managed-dev-protocol.js +0 -1
- package/dist/managed-dev.d.ts +0 -48
- package/dist/managed-dev.js +0 -5
- package/dist/private-object-store.d.ts +0 -28
- package/dist/private-object-store.js +0 -1
- package/dist/project.d.ts +0 -5
- package/dist/project.js +0 -1
- package/dist/recipes/apply.d.ts +0 -26
- package/dist/recipes/apply.js +0 -2
- package/dist/recipes/list.d.ts +0 -14
- package/dist/recipes/list.js +0 -1
- package/dist/recipes/manifest.d.ts +0 -14
- package/dist/recipes/manifest.js +0 -1
- package/dist/recipes/source.d.ts +0 -22
- package/dist/recipes/source.js +0 -1
- package/dist/runner.d.ts +0 -20
- package/dist/runner.js +0 -1
- package/dist/staging.d.ts +0 -33
- package/dist/staging.js +0 -3
- package/dist/tauri-dev-output.d.ts +0 -21
- package/dist/tauri-dev-output.js +0 -2
- package/dist/typecheck.d.ts +0 -4
- package/dist/typecheck.js +0 -2
- package/dist/upgrade/check-skill-current.d.ts +0 -11
- package/dist/upgrade/check-skill-current.js +0 -2
- package/dist/upgrade/ensure-template-remote.d.ts +0 -13
- package/dist/upgrade/ensure-template-remote.js +0 -2
- package/dist/upgrade/fast-forward-template-files.d.ts +0 -9
- package/dist/upgrade/fast-forward-template-files.js +0 -2
- package/dist/upgrade/sync-coreframe-packages.d.ts +0 -8
- package/dist/upgrade/sync-coreframe-packages.js +0 -4
- package/dist/upgrade/template-ref.d.ts +0 -6
- package/dist/upgrade/template-ref.js +0 -1
- package/dist/user-preferences.d.ts +0 -8
- package/dist/user-preferences.js +0 -1
- package/dist/worker-environment.d.ts +0 -95
- package/dist/worker-environment.js +0 -1
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
//#region assets/credentials.d.ts
|
|
2
|
-
declare const assetCredentialEnvironment: {
|
|
3
|
-
readonly applicationKey: "COREFRAME_ASSETS_B2_APPLICATION_KEY";
|
|
4
|
-
readonly applicationKeyId: "COREFRAME_ASSETS_B2_APPLICATION_KEY_ID";
|
|
5
|
-
};
|
|
6
|
-
type AssetCredentials = {
|
|
7
|
-
applicationKey: string;
|
|
8
|
-
applicationKeyId: string;
|
|
9
|
-
};
|
|
10
|
-
type AssetCredentialStore = {
|
|
11
|
-
get(profile: string): Promise<AssetCredentials | undefined>;
|
|
12
|
-
set(profile: string, credentials: AssetCredentials): Promise<void>;
|
|
13
|
-
};
|
|
14
|
-
declare function systemAssetCredentialStore(): AssetCredentialStore;
|
|
15
|
-
declare function resolveAssetCredentials({
|
|
16
|
-
env,
|
|
17
|
-
profile,
|
|
18
|
-
store
|
|
19
|
-
}: {
|
|
20
|
-
env?: NodeJS.ProcessEnv;
|
|
21
|
-
profile: string;
|
|
22
|
-
store?: AssetCredentialStore;
|
|
23
|
-
}): Promise<AssetCredentials>;
|
|
24
|
-
declare function configureAssetCredentials({
|
|
25
|
-
applicationKey,
|
|
26
|
-
applicationKeyId,
|
|
27
|
-
profile,
|
|
28
|
-
store
|
|
29
|
-
}: AssetCredentials & {
|
|
30
|
-
profile: string;
|
|
31
|
-
store?: AssetCredentialStore;
|
|
32
|
-
}): Promise<void>;
|
|
33
|
-
declare function assertAssetCredentialProfile(profile: string): string;
|
|
34
|
-
//#endregion
|
|
35
|
-
export { AssetCredentialStore, AssetCredentials, assertAssetCredentialProfile, assetCredentialEnvironment, configureAssetCredentials, resolveAssetCredentials, systemAssetCredentialStore };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{getKeyring as e,getPassword as t,initBackend as n,setPassword as r}from"cross-keychain";const i=`dev.coreframe.assets`,a=new Set([`macos`,`native-macos`,`native-windows`,`secret-service`,`windows`]),o={applicationKey:`COREFRAME_ASSETS_B2_APPLICATION_KEY`,applicationKeyId:`COREFRAME_ASSETS_B2_APPLICATION_KEY_ID`};function s(){let o=!1;async function s(){if(o)return;await n(e=>a.has(e.id));let t=await e();if(!a.has(t.id))throw Error(`No supported operating system credential store is available. Coreframe requires macOS Keychain, Windows Credential Manager, or Linux Secret Service.`);o=!0}return{async get(e){await s();let n=await t(i,e);if(n)try{return f(JSON.parse(n))}catch{throw Error(`The Coreframe asset credential profile "${e}" is invalid. Run: coreframe assets configure ${e}`)}},async set(e,t){await s(),await r(i,e,JSON.stringify(f(t)))}}}async function c({env:e=process.env,profile:t,store:n=s()}){let r=e[o.applicationKeyId],i=e[o.applicationKey];if(r||i){if(!r||!i)throw Error(`${o.applicationKeyId} and ${o.applicationKey} must be provided together.`);return{applicationKey:i,applicationKeyId:r}}let a;try{a=await n.get(t)}catch(e){throw Error(`Coreframe could not access the operating system credential store for asset profile "${t}": ${e.message}`)}if(!a)throw Error(`Coreframe asset credential profile "${t}" is not configured. Run: coreframe assets configure ${t}`);return a}async function l({applicationKey:e,applicationKeyId:t,profile:n,store:r=s()}){d(n);try{await r.set(n,f({applicationKey:e,applicationKeyId:t}))}catch(e){throw Error(`Coreframe could not store asset profile "${n}" in the operating system credential store: ${e.message}`)}}function u(e){return d(e),e}function d(e){if(!/^[a-z0-9][a-z0-9._-]*$/.test(e))throw Error(`Credential profiles must start with a lowercase letter or number and contain only lowercase letters, numbers, dots, underscores, or hyphens.`)}function f(e){if(!e||typeof e!=`object`||typeof e.applicationKeyId!=`string`||!e.applicationKeyId.trim()||typeof e.applicationKey!=`string`||!e.applicationKey.trim())throw Error(`Asset credentials require a non-empty application key ID and application key.`);return{applicationKeyId:e.applicationKeyId.trim(),applicationKey:e.applicationKey}}export{u as assertAssetCredentialProfile,o as assetCredentialEnvironment,l as configureAssetCredentials,c as resolveAssetCredentials,s as systemAssetCredentialStore};
|
package/dist/assets/images.d.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { AssetProblem, AssetVariant, ImageCatalogEntry } from "./contracts.js";
|
|
2
|
-
import { AssetsConfig } from "../config.js";
|
|
3
|
-
|
|
4
|
-
//#region assets/images.d.ts
|
|
5
|
-
declare function buildAssetVariants({
|
|
6
|
-
assetId,
|
|
7
|
-
config,
|
|
8
|
-
cwd,
|
|
9
|
-
entry,
|
|
10
|
-
sourceDimensions,
|
|
11
|
-
sourcePath
|
|
12
|
-
}: {
|
|
13
|
-
assetId: string;
|
|
14
|
-
config: AssetsConfig;
|
|
15
|
-
cwd: string;
|
|
16
|
-
entry: ImageCatalogEntry;
|
|
17
|
-
sourceDimensions: {
|
|
18
|
-
width: number;
|
|
19
|
-
height: number;
|
|
20
|
-
};
|
|
21
|
-
sourcePath: string;
|
|
22
|
-
}): Promise<AssetVariant[]>;
|
|
23
|
-
declare function assetVariantWidths(entry: ImageCatalogEntry, sourceWidth: number): number[];
|
|
24
|
-
declare function assertVariantWidths(widths: number[] | undefined, sourceWidth: number): void;
|
|
25
|
-
declare function variantWidthsProblem(assetId: string, entry: ImageCatalogEntry, sourceWidth: number): AssetProblem | undefined;
|
|
26
|
-
declare function readImageDimensions(file: string): Promise<{
|
|
27
|
-
width: number;
|
|
28
|
-
height: number;
|
|
29
|
-
}>;
|
|
30
|
-
declare function mediaTypeFor(file: string): string;
|
|
31
|
-
//#endregion
|
|
32
|
-
export { assertVariantWidths, assetVariantWidths, buildAssetVariants, mediaTypeFor, readImageDimensions, variantWidthsProblem };
|
package/dist/assets/images.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{catalogPath as e,resolveAssetVariantFile as t}from"./project.js";import{sha256 as n}from"./storage.js";import{mkdir as r,writeFile as i}from"node:fs/promises";import{dirname as a,extname as o}from"node:path";const s=[320,640,960,1280,1920,2560],c=s.at(-1);async function l({assetId:e,config:o,cwd:s,entry:c,sourceDimensions:l,sourcePath:d}){let f=await h();return Promise.all(u(c,l.width).map(async c=>{let u=await f(d).resize({width:c,withoutEnlargement:!0}).webp().toBuffer(),p=n(u),m=`projects/${o.projectId}/assets/${e}.${p.slice(0,12)}.${c}.webp`,h=t(s,m);await r(a(h),{recursive:!0}),await i(h,u);let g=await f(u).metadata();return{format:`webp`,mediaType:`image/webp`,width:g.width??c,height:g.height??Math.round(l.height/l.width*c),path:m,size:u.byteLength,hash:p}}))}function u(e,t){if(e.variantWidths)return e.variantWidths;let n=Math.min(Math.round(t),c);return[...s.filter(e=>e<=n),n].filter((e,t,n)=>t===0||e!==n[t-1])}function d(e,t){let n=p(e,t);if(n)throw Error(`Invalid variant widths: ${n}`)}function f(t,n,r){let i=p(n.variantWidths,r);return i?{code:`INVALID_VARIANT_WIDTHS`,message:`Asset "${t}" has invalid variantWidths: ${i}`,assetId:t,file:e,fix:`Edit ${e}, then run: coreframe assets build --id ${t}`}:void 0}function p(e,t){if(e!==void 0){if(!Array.isArray(e)||e.length===0)return`expected a non-empty array.`;for(let[n,r]of e.entries()){if(!Number.isInteger(r)||r<=0)return`width ${String(r)} must be a positive integer.`;if(n>0&&r<=e[n-1])return`widths must be unique and strictly ascending.`;if(r>t)return`width ${r} exceeds the source width of ${t}.`}}}async function m(e){let t=await(await h())(e).metadata();if(!t.width||!t.height)throw Error(`Could not read dimensions for ${e}.`);return{width:t.width,height:t.height}}async function h(){try{return(await import(`sharp`)).default}catch{throw Error(`The assets workflow requires the optional sharp dependency.`)}}function g(e){let t={".avif":`image/avif`,".gif":`image/gif`,".jpeg":`image/jpeg`,".jpg":`image/jpeg`,".png":`image/png`,".tif":`image/tiff`,".tiff":`image/tiff`,".webp":`image/webp`}[o(e).toLowerCase()];if(!t)throw Error(`Unsupported raster image type: ${o(e)||`unknown`}.`);return t}export{d as assertVariantWidths,u as assetVariantWidths,l as buildAssetVariants,g as mediaTypeFor,m as readImageDimensions,f as variantWidthsProblem};
|
package/dist/assets/media.d.ts
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { AssetFile, AssetKind, SvgViewBox } from "./contracts.js";
|
|
2
|
-
|
|
3
|
-
//#region assets/media.d.ts
|
|
4
|
-
declare function assetKindFor(file: string): AssetKind;
|
|
5
|
-
declare function mediaTypeForAsset(file: string, kind: AssetKind): string;
|
|
6
|
-
declare function inspectLottie(file: string): Promise<{
|
|
7
|
-
durationSeconds: number;
|
|
8
|
-
frameRate: number;
|
|
9
|
-
height: number;
|
|
10
|
-
width: number;
|
|
11
|
-
}>;
|
|
12
|
-
declare function inspectSvg(file: string): Promise<{
|
|
13
|
-
viewBox: SvgViewBox;
|
|
14
|
-
}>;
|
|
15
|
-
declare function inspectAudio(file: string): Promise<{
|
|
16
|
-
durationSeconds: number;
|
|
17
|
-
}>;
|
|
18
|
-
declare function inspectVideo(file: string): Promise<{
|
|
19
|
-
durationSeconds: number;
|
|
20
|
-
hasAudio: boolean;
|
|
21
|
-
height: number;
|
|
22
|
-
width: number;
|
|
23
|
-
}>;
|
|
24
|
-
declare function buildPassthroughAsset({
|
|
25
|
-
assetId,
|
|
26
|
-
cwd,
|
|
27
|
-
format,
|
|
28
|
-
mediaType,
|
|
29
|
-
projectId,
|
|
30
|
-
sourceDigest,
|
|
31
|
-
sourcePath
|
|
32
|
-
}: {
|
|
33
|
-
assetId: string;
|
|
34
|
-
cwd: string;
|
|
35
|
-
format: AssetFile["format"];
|
|
36
|
-
mediaType: AssetFile["mediaType"];
|
|
37
|
-
projectId: string;
|
|
38
|
-
sourceDigest: string;
|
|
39
|
-
sourcePath: string;
|
|
40
|
-
}): Promise<AssetFile>;
|
|
41
|
-
//#endregion
|
|
42
|
-
export { assetKindFor, buildPassthroughAsset, inspectAudio, inspectLottie, inspectSvg, inspectVideo, mediaTypeForAsset };
|
package/dist/assets/media.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{resolveAssetVariantFile as e}from"./project.js";import{copyFile as t,mkdir as n,readFile as r,stat as i}from"node:fs/promises";import{dirname as a,extname as o}from"node:path";import{createReadStream as s}from"node:fs";import{MP4BoxBuffer as c,createFile as l}from"mp4box";import{parseFile as u}from"music-metadata";import{SaxesParser as d}from"saxes";const f=new Set([`foreignobject`,`script`]),p=/\b(?:data|file|https?|javascript):|\/\//i,m=/url\(\s*["']?(?!#)/i;function h(e){switch(o(e).toLowerCase()){case`.svg`:return`svg`;case`.mp3`:return`audio`;case`.mp4`:return`video`;case`.json`:return`lottie`;default:return`image`}}function g(e,t){if(t===`svg`)return`image/svg+xml`;if(t===`audio`)return`audio/mpeg`;if(t===`video`)return`video/mp4`;if(t===`lottie`)return`application/json`;throw Error(`Raster image media types are resolved by the image pipeline.`)}async function _(e){let t;try{t=JSON.parse(await r(e,`utf8`))}catch(e){throw Error(`Lottie source must be valid JSON: ${e.message}`)}if(!y(t))throw Error(`Lottie source must contain a JSON object.`);let{assets:n,fonts:i,fr:a,h:o,ip:s,layers:c,op:l,w:u}=t;if(!x(u)||!x(o))throw Error(`Lottie source must contain positive integer width and height values.`);if(!b(a))throw Error(`Lottie source must contain a positive frame rate.`);if(typeof s!=`number`||!Number.isFinite(s)||typeof l!=`number`||!Number.isFinite(l)||l<=s)throw Error(`Lottie source must contain finite in and out points with op greater than ip.`);if(!Array.isArray(c))throw Error(`Lottie source must contain a layers array.`);if(n!==void 0){if(!Array.isArray(n))throw Error(`Lottie assets must be an array.`);for(let e of n){if(!y(e))throw Error(`Lottie assets must contain JSON objects.`);if(`p`in e&&!v(e))throw Error(`Lottie image and data assets must be embedded as data URLs.`)}}if(y(i)&&Array.isArray(i.list)){for(let e of i.list)if(y(e)&&typeof e.fPath==`string`&&e.fPath.trim())throw Error(`Lottie fonts must not reference external font files.`)}return{durationSeconds:(l-s)/a,frameRate:a,height:o,width:u}}function v(e){return e.e===1&&typeof e.p==`string`&&/^data:[^,]+,/i.test(e.p)&&(e.u===void 0||e.u===``)}function y(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function b(e){return typeof e==`number`&&Number.isFinite(e)&&e>0}function x(e){return Number.isSafeInteger(e)&&e>0}async function S(e){let t=await r(e,`utf8`),n=new d({xmlns:!0,fileName:e}),i=!1,a=0,o;n.on(`doctype`,()=>{throw Error(`SVG document types and entities are not allowed.`)}),n.on(`processinginstruction`,()=>{throw Error(`SVG processing instructions are not allowed.`)}),n.on(`opentag`,e=>{let t=e.local.toLowerCase();if(!i){if(i=!0,t!==`svg`)throw Error(`SVG source must have an <svg> root element.`);o=w(C(e,`viewBox`))}if(f.has(t))throw Error(`SVG <${e.local}> elements are not allowed.`);t===`style`&&(a+=1);for(let t of Object.values(e.attributes)){let e=t.name.toLowerCase(),n=t.value.trim();if(!(e===`xmlns`||e.startsWith(`xmlns:`))){if(t.local.toLowerCase().startsWith(`on`))throw Error(`SVG event handler attribute "${t.name}" is not allowed.`);if((e===`href`||e===`xlink:href`)&&n&&!n.startsWith(`#`))throw Error(`SVG external reference "${t.name}" is not allowed.`);if(p.test(n)||m.test(n))throw Error(`SVG external resource in attribute "${t.name}" is not allowed.`)}}}),n.on(`closetag`,e=>{e.local.toLowerCase()===`style`&&--a});let s=e=>{if(a>0&&(p.test(e)||m.test(e)))throw Error(`SVG styles may not load external resources.`)};if(n.on(`text`,s),n.on(`cdata`,s),n.write(t).close(),!i||!o)throw Error(`SVG source must contain a valid, positive viewBox.`);return{viewBox:o}}function C(e,t){return Object.values(e.attributes).find(e=>e.name===t)?.value}function w(e){let t=e?.trim().split(/[\s,]+/).map(Number);if(!t||t.length!==4||t.some(e=>!Number.isFinite(e))||t[2]<=0||t[3]<=0)throw Error(`SVG source must contain a valid, positive viewBox.`);return{minX:t[0],minY:t[1],width:t[2],height:t[3]}}async function T(e){let t=await u(e,{duration:!0,skipCovers:!0}),n=t.format.codec?.toLowerCase()??``;if(!n.includes(`layer 3`)&&!n.includes(`mp3`))throw Error(`Audio source must contain MPEG Layer III audio.`);let r=t.format.duration;if(!r||!Number.isFinite(r)||r<=0)throw Error(`Could not determine the MP3 duration.`);return{durationSeconds:r}}async function E(e){let t=await D(e);if(!t.isProgressive)throw Error(`MP4 source must place its moov atom before media data.`);if(t.videoTracks.length!==1)throw Error(`MP4 source must contain exactly one video track.`);if(t.audioTracks.length>1)throw Error(`MP4 source may contain at most one audio track.`);if(t.subtitleTracks.length||t.metadataTracks.length||t.otherTracks.length)throw Error(`MP4 source may contain only H.264 video and optional AAC audio.`);let n=t.videoTracks[0];if(!/^avc[13]\./i.test(n.codec))throw Error(`MP4 video codec "${n.codec}" is not H.264/AVC.`);let r=t.audioTracks[0];if(r&&!/^mp4a\.40\.2$/i.test(r.codec))throw Error(`MP4 audio codec "${r.codec}" is not AAC-LC.`);let i=n.video?.width??n.track_width,a=n.video?.height??n.track_height,o=t.duration/t.timescale;if(!Number.isFinite(i)||i<=0||!Number.isFinite(a)||a<=0||!Number.isFinite(o)||o<=0)throw Error(`Could not determine MP4 dimensions and duration.`);return{durationSeconds:o,hasAudio:!!r,height:Math.round(a),width:Math.round(i)}}async function D(e){let t=l(),n,r;t.onReady=e=>{n=e},t.onError=e=>{r=Error(`Could not parse MP4 source: ${e}`)};let i=0;for await(let n of s(e)){let e=new Uint8Array(n),r=c.fromArrayBuffer(e.slice().buffer,i);t.appendBuffer(r),i+=e.byteLength}if(t.flush(),r)throw r;if(!n)throw Error(`Could not parse MP4 metadata.`);return n}async function O({assetId:r,cwd:o,format:s,mediaType:c,projectId:l,sourceDigest:u,sourcePath:d}){let f=`projects/${l}/assets/${r}.${u.slice(0,12)}.${s}`,p=e(o,f);await n(a(p),{recursive:!0}),await t(d,p);let{size:m}=await i(p);return{format:s,hash:u,mediaType:c,path:f,size:m}}export{h as assetKindFor,O as buildPassthroughAsset,T as inspectAudio,_ as inspectLottie,S as inspectSvg,E as inspectVideo,g as mediaTypeForAsset};
|
package/dist/assets/project.d.ts
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { AssetCatalog, AssetCatalogEntry, AssetFile, AssetManifest, AssetManifestEntry, AssetProblem, AssetVariant, LoadedAssetCatalog, LoadedAssetManifest } from "./contracts.js";
|
|
2
|
-
import { AssetsConfig } from "../config.js";
|
|
3
|
-
|
|
4
|
-
//#region assets/project.d.ts
|
|
5
|
-
declare const catalogPath: string;
|
|
6
|
-
declare const manifestPath: string;
|
|
7
|
-
declare const manifestsDir: string;
|
|
8
|
-
declare const assetIdPattern: RegExp;
|
|
9
|
-
declare const assetPackPattern: RegExp;
|
|
10
|
-
declare function readAssetCatalog(cwd?: string, {
|
|
11
|
-
allowMissing,
|
|
12
|
-
migrate
|
|
13
|
-
}?: {
|
|
14
|
-
allowMissing?: boolean;
|
|
15
|
-
migrate?: boolean;
|
|
16
|
-
}): Promise<LoadedAssetCatalog>;
|
|
17
|
-
declare function readAssetManifest(cwd?: string, {
|
|
18
|
-
allowMissing,
|
|
19
|
-
pack
|
|
20
|
-
}?: {
|
|
21
|
-
allowMissing?: boolean;
|
|
22
|
-
pack?: string;
|
|
23
|
-
}): Promise<LoadedAssetManifest>;
|
|
24
|
-
declare function assetManifestPath(pack?: string): string;
|
|
25
|
-
declare function assetCatalogEntries(catalog: AssetCatalog): Array<{
|
|
26
|
-
assetId: string;
|
|
27
|
-
entry: AssetCatalogEntry;
|
|
28
|
-
pack?: string;
|
|
29
|
-
}>;
|
|
30
|
-
declare function assetCatalogPackNames(catalog: AssetCatalog): string[];
|
|
31
|
-
declare function findCatalogAsset(catalog: AssetCatalog, assetId: string): {
|
|
32
|
-
entry: AssetCatalogEntry;
|
|
33
|
-
pack?: string;
|
|
34
|
-
} | undefined;
|
|
35
|
-
declare function setCatalogAsset(catalog: AssetCatalog, assetId: string, entry: AssetCatalogEntry, pack?: string): void;
|
|
36
|
-
declare function listAssetManifestPacks(cwd?: string): Promise<string[]>;
|
|
37
|
-
declare function removeAssetManifest(cwd: string, pack: string): Promise<void>;
|
|
38
|
-
declare function resolveAssetVariantFile(cwd: string, variantPath: string): string;
|
|
39
|
-
declare function resolveAssetsConfig(cwd: string, provided?: AssetsConfig): Promise<AssetsConfig>;
|
|
40
|
-
declare function validateSource(assetId: string, entry: AssetCatalogEntry): AssetProblem | undefined;
|
|
41
|
-
declare function manifestEntryMatchesCatalog(manifest: AssetManifestEntry, catalog: AssetCatalogEntry): boolean;
|
|
42
|
-
declare function manifestEntryOutputs(entry: AssetManifestEntry): Array<AssetVariant | AssetFile>;
|
|
43
|
-
declare function isAssetVariantPath(path: string, projectPrefix: string | undefined): boolean;
|
|
44
|
-
declare function findAssetReferences(cwd: string): Promise<Array<{
|
|
45
|
-
assetId: string;
|
|
46
|
-
file: string;
|
|
47
|
-
}>>;
|
|
48
|
-
declare function writeCatalog(cwd: string, catalog: AssetCatalog): Promise<void>;
|
|
49
|
-
declare function writeManifest(cwd: string, manifest: AssetManifest, pack?: string): Promise<void>;
|
|
50
|
-
declare function assertAssetId(id: string): void;
|
|
51
|
-
declare function assertAssetPackName(pack: string): void;
|
|
52
|
-
declare function formatAssetProblems(problems: AssetProblem[]): string;
|
|
53
|
-
//#endregion
|
|
54
|
-
export { assertAssetId, assertAssetPackName, assetCatalogEntries, assetCatalogPackNames, assetIdPattern, assetManifestPath, assetPackPattern, catalogPath, findAssetReferences, findCatalogAsset, formatAssetProblems, isAssetVariantPath, listAssetManifestPacks, manifestEntryMatchesCatalog, manifestEntryOutputs, manifestPath, manifestsDir, readAssetCatalog, readAssetManifest, removeAssetManifest, resolveAssetVariantFile, resolveAssetsConfig, setCatalogAsset, validateSource, writeCatalog, writeManifest };
|
package/dist/assets/project.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{readProjectConfig as e}from"../config.js";import"./contracts.js";import{randomUUID as t}from"node:crypto";import{mkdir as n,readFile as r,readdir as i,rename as a,rm as o,stat as s,writeFile as ee}from"node:fs/promises";import{basename as c,dirname as te,extname as l,join as u,resolve as d}from"node:path";import f from"nano-spawn";const p=`assets`,m=u(p,`catalog.json`),h=u(p,`manifest.json`),g=u(p,`manifests`),_=/^[a-z0-9]+(?:[/-][a-z0-9]+)*$/,v=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,y=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,b=/@asset\s+([a-z0-9][a-z0-9/-]*)/g,x=/^[0-9a-f]{64}$/;async function S(e=process.cwd(),{allowMissing:t=!1,migrate:n=!1}={}){let r=await M(e,m,`catalog`,t);if(r.missing&&t)return{catalog:J(),problems:[]};if(r.problem)return{catalog:J(),problems:[r.problem]};if(N(r.value))return{catalog:r.value,problems:[]};if(P(r.value)){let t=F(r.value);return t.problems.length?{catalog:J(),problems:t.problems,migrationRequired:!0}:n?(await X(e,t.catalog),{catalog:t.catalog,migrated:!0,problems:[]}):{catalog:t.catalog,migrationRequired:!0,problems:[{code:`SCHEMA_MIGRATION_REQUIRED`,message:`${m} uses asset schema version 1.`,file:m,fix:`Run: coreframe assets build`}]}}return{catalog:J(),problems:[{code:`INVALID_CATALOG`,message:`${m} has an unsupported shape or schema version.`,file:m}]}}async function C(e=process.cwd(),{allowMissing:t=!1,pack:n}={}){n!==void 0&&$(n);let r=w(n),i=await M(e,r,`manifest`,t);return i.missing&&t?{manifest:Y(n),problems:[]}:i.problem?{manifest:Y(n),problems:[i.problem]}:I(i.value)&&i.value.pack===n?{manifest:i.value,problems:[]}:L(i.value)&&i.value.schemaVersion===1?{manifest:Y(n),problems:[{code:`SCHEMA_MIGRATION_REQUIRED`,message:`${r} uses asset schema version 1.`,file:r,fix:`Run: coreframe assets build`}]}:{manifest:Y(n),problems:[{code:`INVALID_MANIFEST`,message:`${r} has an unsupported shape, pack identity, or schema version.`,file:r}]}}function w(e){return e===void 0?h:u(g,`${e}.json`)}function T(e){return[...Object.entries(e.assets).map(([e,t])=>({assetId:e,entry:t})),...Object.entries(e.packs??{}).flatMap(([e,t])=>Object.entries(t.assets).map(([t,n])=>({assetId:t,entry:n,pack:e})))]}function E(e){return Object.keys(e.packs??{}).sort()}function D(e,t){return T(e).find(e=>e.assetId===t)}function ne(e,t,n,r){r!==void 0&&$(r),delete e.assets[t];for(let n of Object.values(e.packs??{}))delete n.assets[t];if(r===void 0){e.assets[t]=n;return}e.packs??={},e.packs[r]??={assets:{}},e.packs[r].assets[t]=n}async function re(e=process.cwd()){try{return(await i(d(e,g),{withFileTypes:!0})).filter(e=>e.isFile()&&l(e.name)===`.json`).map(e=>c(e.name,`.json`)).filter(e=>v.test(e)).sort()}catch(e){if(e.code===`ENOENT`)return[];throw e}}async function ie(e,t){$(t),await o(d(e,w(t)),{force:!0})}function ae(e,t){if(!O(t,k(t)))throw Error(`Invalid generated asset path: ${t}`);return d(e,`.coreframe/assets`,t)}async function oe(t,n){let r=n??(await e({cwd:t})).assets;if(!r)throw Error(`Static assets are not configured in coreframe.config.ts.`);for(let[e,t]of Object.entries(r))if(typeof t!=`string`||!t.trim())throw Error(`Static asset configuration "${e}" must be a non-empty string.`);if(!y.test(r.projectId))throw Error(`Static asset projectId must use lowercase hyphen-separated segments.`);for(let e of[`endpoint`,`publicBaseUrl`])if(new URL(r[e]).protocol!==`https:`)throw Error(`Static asset ${e} must use HTTPS.`);return{...r,endpoint:r.endpoint.replace(/\/+$/,``),publicBaseUrl:r.publicBaseUrl.replace(/\/+$/,``)}}function se(e,t){let{source:n}=t;if(!n||typeof n.filename!=`string`||!n.filename||typeof n.mediaType!=`string`||!n.mediaType||!Number.isSafeInteger(n.size)||n.size<=0||!x.test(n.digest)||!de(t.kind).has(n.mediaType))return{code:`INVALID_SOURCE`,message:`Asset "${e}" has invalid immutable source metadata for kind "${t.kind}".`,assetId:e,file:m}}function ce(e,t){return e.kind!==t.kind||e.sourceDigest!==t.source.digest?!1:e.kind===`image`&&t.kind===`image`||e.kind===`svg`&&t.kind===`svg`?e.alt===t.alt:e.kind===`audio`||e.kind===`video`||e.kind===`lottie`}function le(e){return e.kind===`image`?e.variants:[e.file]}function O(e,t){let n=e.split(`/`);return!!(t&&e.startsWith(`${t}/`)&&n.length>=4&&!e.includes(`\\`)&&n.every(e=>e&&e!==`.`&&e!==`..`))}function k(e){let[t,n,r]=e.split(`/`);return t===`projects`&&y.test(n??``)&&r===`assets`?`projects/${n}/assets`:void 0}async function A(e){let t=[];for(let n of await j(e)){let i=d(e,n);if(!await me(i))continue;let a=await r(i,`utf8`);for(let e of a.matchAll(b))t.push({assetId:e[1],file:n})}return t}async function j(e){try{return(await f(`git`,[`ls-files`,`*.md`,`*.mdx`,`*.ts`,`*.tsx`],{cwd:e})).stdout.split(/\r?\n/).map(e=>e.trim()).filter(e=>e.startsWith(`content/`)||e.startsWith(`src/`))}catch{return[]}}async function M(e,t,n,i){try{return{value:JSON.parse(await r(d(e,t),`utf8`)),missing:!1}}catch(e){return e.code===`ENOENT`?{value:void 0,missing:!0,problem:i?void 0:{code:n===`catalog`?`CATALOG_MISSING`:`MANIFEST_MISSING`,message:`${t} does not exist.`,file:t,fix:n===`catalog`?`Run: coreframe assets add <file> --id <asset-id> --alt "..."`:`Run: coreframe assets build`}}:{value:void 0,missing:!1,problem:{code:n===`catalog`?`INVALID_CATALOG`:`INVALID_MANIFEST`,message:`${t} is not valid JSON: ${e.message}`,file:t}}}}function N(e){if(!(L(e)&&q(e,[`schemaVersion`,`assets`,`packs`])&&e.schemaVersion===2&&L(e.assets)&&Object.values(e.assets).every(z)&&(e.packs===void 0||L(e.packs)&&Object.entries(e.packs).every(([e,t])=>v.test(e)&&L(t)&&q(t,[`assets`])&&L(t.assets)&&Object.values(t.assets).every(z)))))return!1;let t=T(e).map(({assetId:e})=>e);return new Set(t).size===t.length}function P(e){return!!(L(e)&&q(e,[`schemaVersion`,`assets`])&&e.schemaVersion===1&&L(e.assets)&&Object.values(e.assets).every(R))}function F(e){let t=J(),n=[];for(let[r,i]of Object.entries(e.assets)){if(i.source.mediaType===`image/svg+xml`){if(i.variantWidths){n.push({code:`INVALID_VARIANT_WIDTHS`,message:`SVG asset "${r}" cannot migrate with raster variantWidths.`,assetId:r,file:m,fix:`Remove variantWidths from "${r}", then run: coreframe assets build`});continue}t.assets[r]={kind:`svg`,source:i.source,alt:i.alt};continue}t.assets[r]={kind:`image`,source:i.source,alt:i.alt,...i.variantWidths?{variantWidths:i.variantWidths}:{}}}return{catalog:t,problems:n}}function I(e){return!!(L(e)&&q(e,[`schemaVersion`,`pack`,`assets`])&&e.schemaVersion===2&&(e.pack===void 0||typeof e.pack==`string`&&v.test(e.pack))&&L(e.assets)&&Object.values(e.assets).every(B))}function L(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function R(e){return!!(L(e)&&q(e,[`source`,`alt`,`variantWidths`])&&V(e.source)&&typeof e.alt==`string`&&K(e.variantWidths))}function z(e){if(!L(e)||!V(e.source))return!1;switch(e.kind){case`image`:return q(e,[`kind`,`source`,`alt`,`variantWidths`])&&typeof e.alt==`string`&&K(e.variantWidths);case`svg`:return q(e,[`kind`,`source`,`alt`])&&typeof e.alt==`string`;case`audio`:case`video`:case`lottie`:return q(e,[`kind`,`source`]);default:return!1}}function B(e){if(!L(e)||typeof e.sourceDigest!=`string`||!x.test(e.sourceDigest))return!1;switch(e.kind){case`image`:return q(e,[`kind`,`sourceDigest`,`alt`,`width`,`height`,`variants`])&&typeof e.alt==`string`&&G(e.width)&&G(e.height)&&Array.isArray(e.variants)&&e.variants.every(H);case`svg`:return q(e,[`kind`,`sourceDigest`,`alt`,`viewBox`,`file`])&&typeof e.alt==`string`&&ue(e.viewBox)&&U(e.file,`svg`,`image/svg+xml`);case`audio`:return q(e,[`kind`,`sourceDigest`,`durationSeconds`,`file`])&&G(e.durationSeconds)&&U(e.file,`mp3`,`audio/mpeg`);case`video`:return q(e,[`kind`,`sourceDigest`,`width`,`height`,`durationSeconds`,`hasAudio`,`file`])&&G(e.width)&&G(e.height)&&G(e.durationSeconds)&&typeof e.hasAudio==`boolean`&&U(e.file,`mp4`,`video/mp4`);case`lottie`:return q(e,[`kind`,`sourceDigest`,`width`,`height`,`frameRate`,`durationSeconds`,`file`])&&G(e.width)&&G(e.height)&&G(e.frameRate)&&G(e.durationSeconds)&&U(e.file,`json`,`application/json`);default:return!1}}function V(e){return!!(L(e)&&q(e,[`digest`,`filename`,`mediaType`,`size`])&&typeof e.digest==`string`&&typeof e.filename==`string`&&typeof e.mediaType==`string`&&typeof e.size==`number`)}function H(e){return!!(L(e)&&q(e,[`format`,`mediaType`,`width`,`height`,`path`,`size`,`hash`])&&e.format===`webp`&&e.mediaType===`image/webp`&&G(e.width)&&G(e.height)&&W(e))}function U(e,t,n){return!!(L(e)&&q(e,[`format`,`mediaType`,`path`,`size`,`hash`])&&e.format===t&&e.mediaType===n&&W(e))}function W(e){return typeof e.path==`string`&&Number.isSafeInteger(e.size)&&e.size>0&&typeof e.hash==`string`&&x.test(e.hash)}function ue(e){return!!(L(e)&&q(e,[`minX`,`minY`,`width`,`height`])&&typeof e.minX==`number`&&typeof e.minY==`number`&&G(e.width)&&G(e.height))}function G(e){return typeof e==`number`&&Number.isFinite(e)&&e>0}function K(e){return e===void 0||Array.isArray(e)&&e.every(e=>typeof e==`number`)}function de(e){switch(e){case`image`:return new Set([`image/avif`,`image/gif`,`image/jpeg`,`image/png`,`image/tiff`,`image/webp`]);case`svg`:return new Set([`image/svg+xml`]);case`audio`:return new Set([`audio/mpeg`]);case`video`:return new Set([`video/mp4`]);case`lottie`:return new Set([`application/json`])}}function q(e,t){let n=new Set(t);return Object.keys(e).every(e=>n.has(e))}function J(){return{schemaVersion:2,assets:{}}}function Y(e){return{schemaVersion:2,...e===void 0?{}:{pack:e},assets:{}}}async function X(e,t){let n=Object.fromEntries(Object.entries(t.packs??{}).filter(([,e])=>Object.keys(e.assets).length>0).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>[e,{assets:Q(t.assets)}]));await Z(e,m,{...t,assets:Q(t.assets),...Object.keys(n).length>0?{packs:n}:{packs:void 0}})}async function fe(e,t,n){n!==void 0&&$(n),await Z(e,w(n),{...t,...n===void 0?{pack:void 0}:{pack:n},assets:Q(t.assets)})}async function Z(e,r,i){let s=d(e,r),c=`${s}.${process.pid}.${t()}.tmp`;await n(te(s),{recursive:!0});try{await ee(c,`${JSON.stringify(i,null,2)}\n`,{flag:`wx`}),await a(c,s)}finally{await o(c,{force:!0})}}function Q(e){return Object.fromEntries(Object.entries(e).sort(([e],[t])=>e.localeCompare(t)))}function pe(e){if(!_.test(e))throw Error(`Asset ID "${e}" must use lowercase path segments.`)}function $(e){if(!v.test(e))throw Error(`Asset pack "${e}" must use lowercase hyphen-separated segments.`)}async function me(e){try{return await s(e),!0}catch{return!1}}function he(e){return e.map(e=>[`${e.code}: ${e.message}`,e.file?` file: ${e.file}`:void 0,e.fix?` fix: ${e.fix}`:void 0].filter(Boolean).join(`
|
|
2
|
-
`)).join(`
|
|
3
|
-
`)}export{pe as assertAssetId,$ as assertAssetPackName,T as assetCatalogEntries,E as assetCatalogPackNames,_ as assetIdPattern,w as assetManifestPath,v as assetPackPattern,m as catalogPath,A as findAssetReferences,D as findCatalogAsset,he as formatAssetProblems,O as isAssetVariantPath,re as listAssetManifestPacks,ce as manifestEntryMatchesCatalog,le as manifestEntryOutputs,h as manifestPath,g as manifestsDir,S as readAssetCatalog,C as readAssetManifest,ie as removeAssetManifest,ae as resolveAssetVariantFile,oe as resolveAssetsConfig,ne as setCatalogAsset,se as validateSource,X as writeCatalog,fe as writeManifest};
|
package/dist/assets/storage.d.ts
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { AssetsConfig } from "../config.js";
|
|
2
|
-
import { AssetCredentialStore } from "./credentials.js";
|
|
3
|
-
import { PrivateObjectStore } from "../private-object-store.js";
|
|
4
|
-
|
|
5
|
-
//#region assets/storage.d.ts
|
|
6
|
-
type AssetObjectStore = PrivateObjectStore;
|
|
7
|
-
declare function assetSourceKey(digest: string): string;
|
|
8
|
-
declare function createB2AssetStore({
|
|
9
|
-
config,
|
|
10
|
-
credentialStore,
|
|
11
|
-
env
|
|
12
|
-
}: {
|
|
13
|
-
config: AssetsConfig;
|
|
14
|
-
credentialStore?: AssetCredentialStore;
|
|
15
|
-
env?: NodeJS.ProcessEnv;
|
|
16
|
-
}): AssetObjectStore;
|
|
17
|
-
declare function assetCacheRoot(env?: NodeJS.ProcessEnv): string;
|
|
18
|
-
declare function assetCacheFile(cacheRoot: string, digest: string): string;
|
|
19
|
-
declare function cacheAssetSource({
|
|
20
|
-
body,
|
|
21
|
-
cacheRoot,
|
|
22
|
-
digest,
|
|
23
|
-
env
|
|
24
|
-
}: {
|
|
25
|
-
body: Uint8Array;
|
|
26
|
-
cacheRoot: string;
|
|
27
|
-
digest: string;
|
|
28
|
-
env?: NodeJS.ProcessEnv;
|
|
29
|
-
}): Promise<string>;
|
|
30
|
-
declare function cacheAssetSourceFile({
|
|
31
|
-
cacheRoot,
|
|
32
|
-
digest,
|
|
33
|
-
env,
|
|
34
|
-
source
|
|
35
|
-
}: {
|
|
36
|
-
cacheRoot: string;
|
|
37
|
-
digest: string;
|
|
38
|
-
env?: NodeJS.ProcessEnv;
|
|
39
|
-
source: string;
|
|
40
|
-
}): Promise<string>;
|
|
41
|
-
declare function materializeAssetSource({
|
|
42
|
-
bucket,
|
|
43
|
-
cacheRoot,
|
|
44
|
-
digest,
|
|
45
|
-
env,
|
|
46
|
-
store
|
|
47
|
-
}: {
|
|
48
|
-
bucket: string;
|
|
49
|
-
cacheRoot: string;
|
|
50
|
-
digest: string;
|
|
51
|
-
env?: NodeJS.ProcessEnv;
|
|
52
|
-
store: AssetObjectStore;
|
|
53
|
-
}): Promise<{
|
|
54
|
-
fetched: boolean;
|
|
55
|
-
path: string;
|
|
56
|
-
}>;
|
|
57
|
-
declare function sha256(body: Uint8Array): string;
|
|
58
|
-
declare function sha256File(path: string): Promise<string>;
|
|
59
|
-
//#endregion
|
|
60
|
-
export { AssetObjectStore, assetCacheFile, assetCacheRoot, assetSourceKey, cacheAssetSource, cacheAssetSourceFile, createB2AssetStore, materializeAssetSource, sha256, sha256File };
|
package/dist/assets/storage.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{createB2PrivateObjectStore as e}from"../private-object-store.js";import{createHash as t,randomUUID as n}from"node:crypto";import{copyFile as r,mkdir as i,open as a,readdir as o,rename as s,rm as c,stat as l,utimes as u,writeFile as d}from"node:fs/promises";import{dirname as f,join as p,resolve as m}from"node:path";import{createReadStream as h}from"node:fs";import{homedir as g,platform as _}from"node:os";function v(e){return j(e),`sources/v1/sha256/${e.slice(0,2)}/${e}`}function y({config:t,credentialStore:n,env:r=process.env}){return e({config:t,credentialStore:n,env:r})}function b(e=process.env){return e.COREFRAME_ASSETS_CACHE_DIR?m(e.COREFRAME_ASSETS_CACHE_DIR):_()===`darwin`?p(g(),`Library`,`Caches`,`coreframe`,`assets`):_()===`win32`?p(e.LOCALAPPDATA??p(g(),`AppData`,`Local`),`Coreframe`,`assets`):p(e.XDG_CACHE_HOME??p(g(),`.cache`),`coreframe`,`assets`)}function x(e,t){return j(t),p(e,`v1`,`sha256`,t.slice(0,2),t)}async function S({body:e,cacheRoot:t,digest:r,env:a=process.env}){M(e,r);let o=x(t,r);return await T(o,async()=>{if(await E(o,r)){await D(o);return}await i(f(o),{recursive:!0});let t=`${o}.${process.pid}.${n()}.tmp`;try{await d(t,e,{flag:`wx`}),await s(t,o)}finally{await c(t,{force:!0})}}),await O(t,A(a),o),o}async function C({cacheRoot:e,digest:t,env:a=process.env,source:o}){if(await P(o)!==t)throw Error(`Asset source does not match declared SHA-256 digest ${t}.`);let l=x(e,t);return await T(l,async()=>{if(await E(l,t)){await D(l);return}await i(f(l),{recursive:!0});let e=`${l}.${process.pid}.${n()}.tmp`;try{if(await r(o,e),await P(e)!==t)throw Error(`Asset source changed while it was being cached.`);await s(e,l)}finally{await c(e,{force:!0})}}),await O(e,A(a),l),l}async function w({bucket:e,cacheRoot:t,digest:r,env:a=process.env,store:o}){let l=x(t,r);if(await E(l,r))return await D(l),{fetched:!1,path:l};let u=!1;return await T(l,async()=>{if(await E(l,r)){await D(l);return}await i(f(l),{recursive:!0});let t=`${l}.${process.pid}.${n()}.tmp`;try{if(await o.download(e,v(r),t),await P(t)!==r)throw Error(`Asset source does not match declared SHA-256 digest ${r}.`);await s(t,l),u=!0}finally{await c(t,{force:!0})}}),await O(t,A(a),l),{fetched:u,path:l}}async function T(e,t){await i(f(e),{recursive:!0});let n=`${e}.lock`,r=Date.now();for(;;){let e;try{e=await a(n,`wx`)}catch(e){if(e.code!==`EEXIST`)throw e;let t=await l(n).catch(()=>void 0);if(t&&Date.now()-t.mtimeMs>12e4){await c(n,{force:!0});continue}if(Date.now()-r>=3e4)throw Error(`Timed out waiting for the asset cache lock at ${n}.`);await new Promise(e=>setTimeout(e,50));continue}try{await t()}finally{await e.close(),await c(n,{force:!0})}return}}async function E(e,t){try{return await P(e)===t}catch{return!1}}async function D(e){let t=new Date;await u(e,t,t)}async function O(e,t,n){let r=await k(e),i=r.reduce((e,t)=>e+t.size,0);for(let e of r.sort((e,t)=>e.mtimeMs-t.mtimeMs)){if(i<=t)break;e.path!==n&&(await c(e.path,{force:!0}),i-=e.size)}}async function k(e){let t=[],n=async e=>{let r=await o(e,{withFileTypes:!0}).catch(()=>[]);for(let i of r){let r=p(e,i.name);if(i.isDirectory())await n(r);else if(!i.name.endsWith(`.lock`)&&!i.name.endsWith(`.tmp`)){let e=await l(r);t.push({path:r,size:e.size,mtimeMs:e.mtimeMs})}}};return await n(e),t}function A(e){let t=Number(e.COREFRAME_ASSETS_CACHE_MAX_BYTES);return Number.isSafeInteger(t)&&t>0?t:5368709120}function j(e){if(!/^[0-9a-f]{64}$/.test(e))throw Error(`Invalid SHA-256 asset digest: ${e}`)}function M(e,t){let n=N(e);if(n!==t)throw Error(`Asset integrity check failed: expected sha256:${t}, received sha256:${n}.`)}function N(e){return t(`sha256`).update(e).digest(`hex`)}async function P(e){let n=t(`sha256`);for await(let t of h(e))n.update(t);return n.digest(`hex`)}export{x as assetCacheFile,b as assetCacheRoot,v as assetSourceKey,S as cacheAssetSource,C as cacheAssetSourceFile,y as createB2AssetStore,w as materializeAssetSource,N as sha256,P as sha256File};
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { AssetBuildResult, AssetProblem, AssetPublishResult, AssetStatus } from "./contracts.js";
|
|
2
|
-
import { AssetsConfig } from "../config.js";
|
|
3
|
-
import { AssetObjectStore } from "./storage.js";
|
|
4
|
-
|
|
5
|
-
//#region assets/workflows.d.ts
|
|
6
|
-
type AssetWorkflowOptions = {
|
|
7
|
-
cacheDir?: string;
|
|
8
|
-
config?: AssetsConfig;
|
|
9
|
-
cwd?: string;
|
|
10
|
-
env?: NodeJS.ProcessEnv;
|
|
11
|
-
store?: AssetObjectStore;
|
|
12
|
-
};
|
|
13
|
-
type AddAssetOptions = AssetWorkflowOptions & {
|
|
14
|
-
file: string;
|
|
15
|
-
id: string;
|
|
16
|
-
alt?: string;
|
|
17
|
-
pack?: string;
|
|
18
|
-
variantWidths?: number[];
|
|
19
|
-
};
|
|
20
|
-
type BuildAssetsOptions = AssetWorkflowOptions & {
|
|
21
|
-
id?: string;
|
|
22
|
-
pack?: string;
|
|
23
|
-
updateManifest?: boolean;
|
|
24
|
-
};
|
|
25
|
-
type CheckAssetsOptions = AssetWorkflowOptions & {
|
|
26
|
-
fix?: boolean;
|
|
27
|
-
pack?: string;
|
|
28
|
-
};
|
|
29
|
-
type CheckAssetManifestsOptions = AssetWorkflowOptions & {
|
|
30
|
-
pack?: string;
|
|
31
|
-
};
|
|
32
|
-
type PublishAssetsOptions = AssetWorkflowOptions & {
|
|
33
|
-
pack?: string;
|
|
34
|
-
};
|
|
35
|
-
type AssetManifestStatus = {
|
|
36
|
-
ok: boolean;
|
|
37
|
-
problems: AssetProblem[];
|
|
38
|
-
requiresFullBuild: boolean;
|
|
39
|
-
staleAssetIds: string[];
|
|
40
|
-
};
|
|
41
|
-
declare function addAsset({
|
|
42
|
-
alt,
|
|
43
|
-
cacheDir,
|
|
44
|
-
config,
|
|
45
|
-
cwd,
|
|
46
|
-
env,
|
|
47
|
-
file,
|
|
48
|
-
id,
|
|
49
|
-
pack,
|
|
50
|
-
store,
|
|
51
|
-
variantWidths
|
|
52
|
-
}: AddAssetOptions): Promise<AssetBuildResult>;
|
|
53
|
-
declare function buildAssets({
|
|
54
|
-
cacheDir,
|
|
55
|
-
config,
|
|
56
|
-
cwd,
|
|
57
|
-
env,
|
|
58
|
-
id,
|
|
59
|
-
pack,
|
|
60
|
-
store,
|
|
61
|
-
updateManifest
|
|
62
|
-
}?: BuildAssetsOptions): Promise<AssetBuildResult>;
|
|
63
|
-
declare function checkAssetManifests(options?: CheckAssetManifestsOptions): Promise<AssetManifestStatus>;
|
|
64
|
-
declare function checkAssets(options?: CheckAssetsOptions): Promise<AssetStatus>;
|
|
65
|
-
declare function publishAssets(options?: PublishAssetsOptions): Promise<AssetPublishResult>;
|
|
66
|
-
declare function materializeAsset(assetId: string, options?: BuildAssetsOptions): Promise<AssetBuildResult>;
|
|
67
|
-
declare function printAssetResult(result: unknown, json?: boolean): void;
|
|
68
|
-
//#endregion
|
|
69
|
-
export { AddAssetOptions, AssetManifestStatus, AssetWorkflowOptions, BuildAssetsOptions, CheckAssetManifestsOptions, CheckAssetsOptions, PublishAssetsOptions, addAsset, buildAssets, checkAssetManifests, checkAssets, materializeAsset, printAssetResult, publishAssets };
|
package/dist/assets/workflows.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./contracts.js";import{assertAssetId as e,assertAssetPackName as t,assetCatalogEntries as n,assetCatalogPackNames as r,assetIdPattern as i,assetManifestPath as a,catalogPath as o,findAssetReferences as s,findCatalogAsset as c,formatAssetProblems as l,isAssetVariantPath as u,listAssetManifestPacks as d,manifestEntryMatchesCatalog as f,manifestEntryOutputs as p,readAssetCatalog as m,readAssetManifest as h,removeAssetManifest as g,resolveAssetVariantFile as _,resolveAssetsConfig as v,setCatalogAsset as y,validateSource as b,writeCatalog as x,writeManifest as S}from"./project.js";import{assetCacheRoot as C,assetSourceKey as w,cacheAssetSourceFile as T,createB2AssetStore as E,materializeAssetSource as D,sha256File as O}from"./storage.js";import{assertVariantWidths as k,assetVariantWidths as A,buildAssetVariants as j,mediaTypeFor as M,readImageDimensions as N,variantWidthsProblem as P}from"./images.js";import{assetKindFor as F,buildPassthroughAsset as I,inspectAudio as L,inspectLottie as R,inspectSvg as z,inspectVideo as B,mediaTypeForAsset as V}from"./media.js";import{mkdir as H,stat as U,writeFile as W}from"node:fs/promises";import{basename as G,dirname as K,join as q,relative as J,resolve as Y,sep as X}from"node:path";const ee=q(`.coreframe/assets`,`asset-publish-report.json`);async function te({alt:n,cacheDir:r,config:i,cwd:a=process.cwd(),env:o=process.env,file:s,id:c,pack:l,store:u,variantWidths:d}){e(c),l!==void 0&&t(l);let f=Y(a,s),p=F(f),h=n?.trim();if((p===`image`||p===`svg`)&&!h)throw Error(`Raster images and SVG assets require non-empty alt text.`);if(p!==`image`&&d)throw Error(`Asset kind "${p}" does not support responsive variant widths.`);await re(p,f,d);let g=await m(a,{allowMissing:!0,migrate:!0});if(g.problems.length>0)return{ok:!1,assets:[],fetched:[],problems:g.problems};let _=await v(a,i),b=u??E({config:_,env:o}),S=await O(f),D={digest:S,filename:G(s),mediaType:p===`image`?M(s):V(s,p),size:(await U(f)).size},k=r??C(o),A=await T({cacheRoot:k,digest:S,env:o,source:f}),j=w(S);if(!await b.has(_.sourceBucket,j)&&(await b.upload(_.sourceBucket,j,A,D.mediaType),!await b.has(_.sourceBucket,j)))throw Error(`Backblaze B2 did not confirm source upload ${j}.`);return y(g.catalog,c,ne({alt:h,kind:p,source:D,variantWidths:d}),l),await x(a,g.catalog),Z({cacheDir:k,config:_,cwd:a,env:o,id:g.migrated?void 0:c,pack:g.migrated?void 0:l,store:b})}function ne({alt:e,kind:t,source:n,variantWidths:r}){return t===`image`?{kind:t,source:n,alt:e,...r?{variantWidths:r}:{}}:t===`svg`?{kind:t,source:n,alt:e}:{kind:t,source:n}}async function re(e,t,n){if(e===`image`){k(n,(await N(t)).width),M(t);return}if(e===`svg`){await z(t);return}if(e===`audio`){await L(t);return}if(e===`video`){await B(t);return}await R(t)}async function Z({cacheDir:e,config:i,cwd:a=process.cwd(),env:s=process.env,id:l,pack:u,store:f,updateManifest:_=!0}={}){u!==void 0&&t(u);let y=await m(a,{migrate:!0}),x=[...y.problems],T=[],O=[];if(x.length>0)return{ok:!1,assets:T,fetched:O,problems:x};y.migrated&&(l=void 0,u=void 0);let k=n(y.catalog),A=l?c(y.catalog,l):void 0;if(l&&!A)return x.push({code:`REFERENCE_MISSING`,message:`Asset "${l}" is not present in ${o}.`,assetId:l,fix:`Run: coreframe assets add <file> --id ${l}`}),{ok:!1,assets:T,fetched:O,problems:x};if(l&&u!==void 0&&A?.pack!==u)return x.push({code:`REFERENCE_MISSING`,message:`Asset "${l}" is not present in asset pack "${u}".`,assetId:l,fix:`Build the asset without --pack or use its owning pack.`}),{ok:!1,assets:T,fetched:O,problems:x};let j=l?A?.pack:u;if(!l&&u!==void 0&&!y.catalog.packs?.[u])return x.push({code:`REFERENCE_MISSING`,message:`Asset pack "${u}" is not present in ${o}.`,fix:`Add an asset with --pack ${u}.`}),{ok:!1,assets:T,fetched:O,problems:x};let M=k.filter(e=>(l===void 0||e.assetId===l)&&(j===void 0?u===void 0||e.pack===void 0:e.pack===j)),N=l!==void 0||u!==void 0?[j]:[void 0,...r(y.catalog)],P=await v(a,i),F=f??E({config:P,env:s}),I=e??C(s),L=new Map;for(let e of N)if(l&&_){let t=await h(a,{allowMissing:!0,pack:e});if(t.problems.length>0)return{ok:!1,assets:T,fetched:O,problems:t.problems};L.set(e,t.manifest)}else L.set(e,ie(e));for(let{assetId:e,entry:t,pack:n}of M){let r=b(e,t);if(r){x.push(r);continue}let i;try{i=await D({bucket:P.sourceBucket,cacheRoot:I,digest:t.source.digest,env:s,store:F})}catch(t){x.push({code:`SOURCE_UNAVAILABLE`,message:`Asset "${e}" source could not be materialized: ${t.message}`,assetId:e,fix:`Check the B2 asset configuration and credential profile "${P.credentialProfile}".`});continue}i.fetched&&O.push(w(t.source.digest));try{let r=await ae({assetId:e,config:P,cwd:a,entry:t,sourcePath:i.path});L.get(n).assets[e]=r,T.push({assetId:e,outputs:p(r)})}catch(n){x.push({code:`INVALID_MEDIA`,message:`Asset "${e}" could not be built: ${n.message}`,assetId:e,file:o,fix:`Replace the source with a supported ${t.kind} file, then run: coreframe assets build --id ${e}`})}}if(_&&x.length===0){for(let[e,t]of L)await S(a,t,e);if(l===void 0&&u===void 0){let e=new Set(r(y.catalog));for(let t of await d(a))e.has(t)||await g(a,t)}}return{ok:x.length===0,assets:T,fetched:O,problems:x}}function ie(e){return{schemaVersion:2,...e===void 0?{}:{pack:e},assets:{}}}async function ae({assetId:e,config:t,cwd:n,entry:r,sourcePath:i}){if(r.kind===`image`){let a=await N(i),o=P(e,r,a.width);if(o)throw Error(o.message);let s=await j({assetId:e,config:t,cwd:n,entry:r,sourcePath:i,sourceDimensions:a});return{kind:`image`,sourceDigest:r.source.digest,alt:r.alt,...a,variants:s}}let a=await I({assetId:e,cwd:n,format:r.kind===`svg`?`svg`:r.kind===`audio`?`mp3`:r.kind===`video`?`mp4`:`json`,mediaType:r.source.mediaType,projectId:t.projectId,sourceDigest:r.source.digest,sourcePath:i});return r.kind===`svg`?{kind:`svg`,sourceDigest:r.source.digest,alt:r.alt,...await z(i),file:a}:r.kind===`audio`?{kind:`audio`,sourceDigest:r.source.digest,...await L(i),file:a}:r.kind===`video`?{kind:`video`,sourceDigest:r.source.digest,...await B(i),file:a}:{kind:`lottie`,sourceDigest:r.source.digest,...await R(i),file:a}}async function Q(e={}){let{cwd:i=process.cwd(),pack:s}=e;s!==void 0&&t(s);let c=await m(i),l=[...c.problems],g=new Set,_=l.length>0;if(l.some(e=>e.code===`SCHEMA_MIGRATION_REQUIRED`))return{ok:!1,catalog:c.catalog,expectedPrefix:``,manifests:new Map,problems:l,requiresFullBuild:!0,selectedEntries:[],staleAssetIds:[]};if(s!==void 0&&!c.catalog.packs?.[s])return l.push({code:`REFERENCE_MISSING`,message:`Asset pack "${s}" is not present in ${o}.`,fix:`Add an asset with --pack ${s}.`}),{ok:!1,catalog:c.catalog,expectedPrefix:``,manifests:new Map,problems:l,requiresFullBuild:!0,selectedEntries:[],staleAssetIds:[]};let y=s===void 0?[void 0,...r(c.catalog)]:[s],b=new Map;for(let e of y){let t=await h(i,{pack:e});l.push(...t.problems),_||=t.problems.length>0,b.set(e,t.manifest)}if(s===void 0){let e=new Set(r(c.catalog));for(let t of await d(i))e.has(t)||(l.push({code:`MANIFEST_STALE`,message:`Generated asset pack manifest "${t}" is not present in the catalog.`,file:a(t),fix:`Run: coreframe assets build`}),_=!0)}let x=`projects/${(await v(i,e.config)).projectId}/assets`,S=n(c.catalog).filter(e=>s===void 0||e.pack===s);for(let{assetId:e,entry:t,pack:n}of S){let r=a(n),i=b.get(n)?.assets[e];if(!i||!f(i,t)){l.push({code:`MANIFEST_STALE`,message:`Asset "${e}" is missing from the generated manifest or does not match its catalog entry.`,assetId:e,file:r,fix:`Run: coreframe assets build --id ${e}`}),g.add(e);continue}if(t.kind===`image`&&i.kind===`image`){let n=P(e,t,i.width);if(n)l.push(n),g.add(e);else{let n=A(t,i.width),a=i.variants.map(e=>e.width);(n.length!==a.length||!n.every((e,t)=>e===a[t]))&&(l.push({code:`MANIFEST_STALE`,message:`Asset "${e}" generated variants do not match its catalog widths.`,assetId:e,file:r,fix:`Run: coreframe assets build --id ${e}`}),g.add(e))}}for(let t of p(i))u(t.path,x)||(l.push({code:`INVALID_VARIANT_PATH`,message:`Asset "${e}" has an invalid generated output path.`,assetId:e,file:t.path,fix:`Run: coreframe assets build --id ${e}`}),g.add(e))}for(let[e,t]of b){let n=e===void 0?c.catalog.assets:c.catalog.packs?.[e]?.assets;for(let r of Object.keys(t.assets))n?.[r]||(l.push({code:`MANIFEST_STALE`,message:`Generated manifest asset "${r}" is not present in its catalog collection.`,assetId:r,file:a(e),fix:`Run: coreframe assets build`}),_=!0)}return{ok:l.length===0,catalog:c.catalog,expectedPrefix:x,manifests:b,problems:l,requiresFullBuild:_,selectedEntries:S,staleAssetIds:[...g].sort()}}async function oe(e={}){let{ok:t,problems:n,requiresFullBuild:r,staleAssetIds:i}=await Q(e);return{ok:t,problems:n,requiresFullBuild:r,staleAssetIds:i}}async function $(e={}){let{cwd:n=process.cwd(),fix:r=!1,pack:a}=e;if(a!==void 0&&t(a),r){let t=await Z(e);if(!t.ok)return{ok:!1,assets:[],problems:t.problems}}let l=await Q(e),{catalog:d,expectedPrefix:m,manifests:h,selectedEntries:g}=l,v=[...l.problems],y=[];if(v.some(e=>e.code===`SCHEMA_MIGRATION_REQUIRED`)||a!==void 0&&!d.packs?.[a])return{ok:!1,assets:y,problems:v};let x=await s(n);for(let{assetId:e,entry:t,pack:r}of g){i.test(e)||v.push({code:`INVALID_ASSET_ID`,message:`Asset ID "${e}" must use lowercase path segments.`,assetId:e,file:o}),(t.kind===`image`||t.kind===`svg`)&&!t.alt.trim()&&v.push({code:`INVALID_ALT`,message:`Asset "${e}" is missing alt text.`,assetId:e,file:o});let a=b(e,t);a&&v.push(a);let s=h.get(r)?.assets[e];if(!s||!f(s,t))continue;let c=await Promise.all(p(s).map(async e=>{let t=u(e.path,m),r=!1;if(t)try{let t=_(n,e.path);r=(await U(t)).size===e.size&&await O(t)===e.hash}catch{r=!1}return{...e,exists:r}}));c.every(e=>e.exists)||v.push({code:`GENERATED_ASSET_MISSING`,message:`Asset "${e}" is missing its expected generated output.`,assetId:e,fix:`Run: coreframe assets build --id ${e}`}),y.push({assetId:e,source:t.source,outputs:c})}for(let e of x){let t=c(d,e.assetId);t?t.entry.kind!==`image`&&t.entry.kind!==`svg`&&v.push({code:`INVALID_REFERENCE`,message:`Markdown image reference "${e.assetId}" cannot use asset kind "${t.entry.kind}".`,assetId:e.assetId,file:e.file}):v.push({code:`INVALID_REFERENCE`,message:`Asset reference "${e.assetId}" is not present in ${o}.`,assetId:e.assetId,file:e.file,fix:`Run: coreframe assets add <file> --id ${e.assetId}`})}return{ok:v.length===0,assets:y,problems:v}}async function se(e={}){let{cwd:t=process.cwd(),env:n=process.env,pack:i}=e,a=[...(await $(e)).problems],o=[],s=[],c=Y(t,ee);if(a.length===0){let a=await v(t,e.config),c=e.store??E({config:a,env:n}),{catalog:l}=await m(t),u=i===void 0?[void 0,...r(l)]:[i];for(let e of u){let{manifest:n}=await h(t,{pack:e});for(let[e,r]of Object.entries(n.assets))for(let n of p(r)){let r=_(t,n.path),i={assetId:e,source:J(t,r).split(X).join(`/`),target:`${a.publicBucket}/${n.path}`,size:n.size};if(await c.has(a.publicBucket,n.path)){s.push(i);continue}await c.upload(a.publicBucket,n.path,r,n.mediaType),o.push(i)}}}let l={ok:a.length===0,uploaded:o,skipped:s,reportPath:c,problems:a};return await H(K(c),{recursive:!0}),await W(c,`${JSON.stringify(l,null,2)}\n`),l}async function ce(e,t={}){return Z({...t,id:e})}function le(e,t=!1){if(t){console.log(JSON.stringify(e,null,2));return}let n=e;n.problems?.length&&console.error(l(n.problems)),console.log(n.ok===!1?`Asset workflow has problems.`:`Asset workflow complete.`)}export{te as addAsset,Z as buildAssets,oe as checkAssetManifests,$ as checkAssets,ce as materializeAsset,le as printAssetResult,se as publishAssets};
|
package/dist/assets.d.ts
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { AssetBuildEntry, AssetBuildResult, AssetCatalog, AssetCatalogEntry, AssetCatalogPack, AssetFile, AssetKind, AssetManifest, AssetManifestEntry, AssetOutput, AssetOutputStatus, AssetProblem, AssetPublishResult, AssetSource, AssetStatus, AssetStatusEntry, AssetVariant, AudioAssetFile, AudioCatalogEntry, AudioManifestEntry, ImageCatalogEntry, ImageManifestEntry, LoadedAssetCatalog, LoadedAssetManifest, LottieAssetFile, LottieCatalogEntry, LottieManifestEntry, PublishedAsset, SvgAssetFile, SvgCatalogEntry, SvgManifestEntry, SvgViewBox, VideoAssetFile, VideoCatalogEntry, VideoManifestEntry } from "./assets/contracts.js";
|
|
2
|
-
import { assetCatalogEntries, assetCatalogPackNames, assetManifestPath, findCatalogAsset, formatAssetProblems, listAssetManifestPacks, manifestEntryOutputs, readAssetCatalog, readAssetManifest, resolveAssetVariantFile } from "./assets/project.js";
|
|
3
|
-
import { AddAssetOptions, AssetManifestStatus, AssetWorkflowOptions, BuildAssetsOptions, CheckAssetManifestsOptions, CheckAssetsOptions, PublishAssetsOptions, addAsset, buildAssets, checkAssetManifests, checkAssets, materializeAsset, printAssetResult, publishAssets } from "./assets/workflows.js";
|
|
4
|
-
export { AddAssetOptions, type AssetBuildEntry, type AssetBuildResult, type AssetCatalog, type AssetCatalogEntry, type AssetCatalogPack, type AssetFile, type AssetKind, type AssetManifest, type AssetManifestEntry, AssetManifestStatus, type AssetOutput, type AssetOutputStatus, type AssetProblem, type AssetPublishResult, type AssetSource, type AssetStatus, type AssetStatusEntry, type AssetVariant, AssetWorkflowOptions, type AudioAssetFile, type AudioCatalogEntry, type AudioManifestEntry, BuildAssetsOptions, CheckAssetManifestsOptions, CheckAssetsOptions, type ImageCatalogEntry, type ImageManifestEntry, type LoadedAssetCatalog, type LoadedAssetManifest, type LottieAssetFile, type LottieCatalogEntry, type LottieManifestEntry, PublishAssetsOptions, type PublishedAsset, type SvgAssetFile, type SvgCatalogEntry, type SvgManifestEntry, type SvgViewBox, type VideoAssetFile, type VideoCatalogEntry, type VideoManifestEntry, addAsset, assetCatalogEntries, assetCatalogPackNames, assetManifestPath, buildAssets, checkAssetManifests, checkAssets, findCatalogAsset, formatAssetProblems, listAssetManifestPacks, manifestEntryOutputs, materializeAsset, printAssetResult, publishAssets, readAssetCatalog, readAssetManifest, resolveAssetVariantFile };
|
package/dist/assets.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{assetCatalogEntries as e,assetCatalogPackNames as t,assetManifestPath as n,findCatalogAsset as r,formatAssetProblems as i,listAssetManifestPacks as a,manifestEntryOutputs as o,readAssetCatalog as s,readAssetManifest as c,resolveAssetVariantFile as l}from"./assets/project.js";import{addAsset as u,buildAssets as d,checkAssetManifests as f,checkAssets as p,materializeAsset as m,printAssetResult as h,publishAssets as g}from"./assets/workflows.js";export{u as addAsset,e as assetCatalogEntries,t as assetCatalogPackNames,n as assetManifestPath,d as buildAssets,f as checkAssetManifests,p as checkAssets,r as findCatalogAsset,i as formatAssetProblems,a as listAssetManifestPacks,o as manifestEntryOutputs,m as materializeAsset,h as printAssetResult,g as publishAssets,s as readAssetCatalog,c as readAssetManifest,l as resolveAssetVariantFile};
|
package/dist/config.d.ts
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { DatabaseDialect } from "./db/client.js";
|
|
2
|
-
import { DeployConfig } from "./deploy/config.js";
|
|
3
|
-
import { DevPlatform } from "./dev.js";
|
|
4
|
-
import { WorkerConfig } from "./worker-environment.js";
|
|
5
|
-
|
|
6
|
-
//#region config.d.ts
|
|
7
|
-
type CoreframeConfig = {
|
|
8
|
-
assets?: AssetsConfig;
|
|
9
|
-
database?: DatabaseConfig;
|
|
10
|
-
deploy?: DeployConfig;
|
|
11
|
-
dev?: DevConfig;
|
|
12
|
-
i18n?: I18nConfig;
|
|
13
|
-
worker?: WorkerConfig;
|
|
14
|
-
};
|
|
15
|
-
type AssetsConfig = {
|
|
16
|
-
credentialProfile: string;
|
|
17
|
-
endpoint: string;
|
|
18
|
-
projectId: string;
|
|
19
|
-
publicBaseUrl: string;
|
|
20
|
-
publicBucket: string;
|
|
21
|
-
region: string;
|
|
22
|
-
sourceBucket: string;
|
|
23
|
-
};
|
|
24
|
-
type DevConfig = {
|
|
25
|
-
platforms?: DevPlatform[];
|
|
26
|
-
};
|
|
27
|
-
type I18nConfig = {
|
|
28
|
-
catalogs: string[];
|
|
29
|
-
directory?: string;
|
|
30
|
-
generator?: {
|
|
31
|
-
args?: string[];
|
|
32
|
-
command: string;
|
|
33
|
-
id: string;
|
|
34
|
-
};
|
|
35
|
-
locales: string[];
|
|
36
|
-
sourceLocale: string;
|
|
37
|
-
};
|
|
38
|
-
type DatabaseConfig = {
|
|
39
|
-
dialect: DatabaseDialect;
|
|
40
|
-
seed?: string;
|
|
41
|
-
};
|
|
42
|
-
declare function defineConfig(config: CoreframeConfig): CoreframeConfig;
|
|
43
|
-
declare function readProjectConfig({
|
|
44
|
-
cwd
|
|
45
|
-
}?: {
|
|
46
|
-
cwd?: string;
|
|
47
|
-
}): Promise<CoreframeConfig>;
|
|
48
|
-
//#endregion
|
|
49
|
-
export { AssetsConfig, CoreframeConfig, DatabaseConfig, DevConfig, I18nConfig, defineConfig, readProjectConfig };
|
package/dist/config.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{stat as e}from"node:fs/promises";import{resolve as t}from"node:path";import{pathToFileURL as n}from"node:url";function r(e){return e}async function i({cwd:r=process.cwd()}={}){let i=t(r,`coreframe.config.ts`),a;try{a=(await e(i,{bigint:!0})).mtimeNs}catch{return{}}let o=n(i);return o.searchParams.set(`modified`,a.toString()),(await import(o.href)).default??{}}export{r as defineConfig,i as readProjectConfig};
|
package/dist/db/apply-seed.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
//#region db/apply-seed.d.ts
|
|
2
|
-
type SeedQuery = object;
|
|
3
|
-
type SeedDatabase = {
|
|
4
|
-
transaction<T>(transaction: (tx: any) => Promise<T>): Promise<T>;
|
|
5
|
-
};
|
|
6
|
-
declare function applySeed(db: SeedDatabase, seed: readonly SeedQuery[]): Promise<void>;
|
|
7
|
-
//#endregion
|
|
8
|
-
export { SeedDatabase, SeedQuery, applySeed };
|
package/dist/db/apply-seed.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
async function e(e,t){t.length!==0&&await e.transaction(async e=>{let n=e;for(let e of t)await n.execute(e.getSQL())})}export{e as applySeed};
|
package/dist/db/client.d.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { SQL } from "drizzle-orm";
|
|
2
|
-
|
|
3
|
-
//#region db/client.d.ts
|
|
4
|
-
type DatabaseDialect = "postgres" | "sqlite";
|
|
5
|
-
type QueryResult<Row extends Record<string, unknown> = Record<string, unknown>> = {
|
|
6
|
-
rowCount?: number | null;
|
|
7
|
-
rows: Row[];
|
|
8
|
-
};
|
|
9
|
-
type DatabaseClient = {
|
|
10
|
-
dialect: DatabaseDialect;
|
|
11
|
-
execute<Row extends Record<string, unknown> = Record<string, unknown>>(statement: string): Promise<QueryResult<Row>>;
|
|
12
|
-
transaction?<Result>(run: (database: DatabaseClient) => Promise<Result>): Promise<Result>;
|
|
13
|
-
close?(): Promise<void>;
|
|
14
|
-
};
|
|
15
|
-
type DrizzleExecutor = {
|
|
16
|
-
execute<Result = unknown>(query: SQL): Result | Promise<Result>;
|
|
17
|
-
};
|
|
18
|
-
type CreateDatabaseAdapterOptions = {
|
|
19
|
-
close?(): Promise<void>;
|
|
20
|
-
database: DrizzleExecutor;
|
|
21
|
-
dialect: DatabaseDialect;
|
|
22
|
-
};
|
|
23
|
-
declare function createDatabaseAdapter({
|
|
24
|
-
close,
|
|
25
|
-
database,
|
|
26
|
-
dialect
|
|
27
|
-
}: CreateDatabaseAdapterOptions): DatabaseClient;
|
|
28
|
-
declare function normalizeQueryResult<Row extends Record<string, unknown> = Record<string, unknown>>(result: unknown): QueryResult<Row>;
|
|
29
|
-
//#endregion
|
|
30
|
-
export { CreateDatabaseAdapterOptions, DatabaseClient, DatabaseDialect, DrizzleExecutor, QueryResult, createDatabaseAdapter, normalizeQueryResult };
|
package/dist/db/client.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{sql as e}from"drizzle-orm";function t({close:t,database:r,dialect:i}){return{dialect:i,async execute(t){return n(await r.execute(e.raw(t)))},close:t}}function n(e){return Array.isArray(e)?{rows:e}:r(e)?{rowCount:typeof e.rowCount==`number`?e.rowCount:null,rows:e.rows}:{rows:[]}}function r(e){return typeof e==`object`&&!!e&&`rows`in e&&Array.isArray(e.rows)}export{t as createDatabaseAdapter,n as normalizeQueryResult};
|
package/dist/db/config.d.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
//#region db/config.d.ts
|
|
2
|
-
declare const MIGRATIONS_FOLDER = "drizzle";
|
|
3
|
-
declare const HELD_MIGRATIONS_FOLDER = "drizzle-hold";
|
|
4
|
-
declare const NOW: Date;
|
|
5
|
-
declare const SEED_IDS: {
|
|
6
|
-
readonly adminUser: "00000000-0000-4000-8000-000000000001";
|
|
7
|
-
readonly adminCredentialAccount: "00000000-0000-4000-8000-000000000101";
|
|
8
|
-
readonly viewerUser: "00000000-0000-4000-8000-000000000002";
|
|
9
|
-
readonly inactiveUser: "00000000-0000-4000-8000-000000000003";
|
|
10
|
-
readonly unicodeUser: "00000000-0000-4000-8000-000000000004";
|
|
11
|
-
readonly longNameUser: "00000000-0000-4000-8000-000000000005";
|
|
12
|
-
};
|
|
13
|
-
declare const SEED_EMAILS: {
|
|
14
|
-
readonly adminUser: "admin@example.com";
|
|
15
|
-
readonly viewerUser: "viewer@example.com";
|
|
16
|
-
readonly inactiveUser: "inactive@example.com";
|
|
17
|
-
readonly unicodeUser: "unicode@example.com";
|
|
18
|
-
readonly longNameUser: "long-name@example.com";
|
|
19
|
-
};
|
|
20
|
-
type SeedProfile = "default" | "large";
|
|
21
|
-
declare function getSeedProfile(argv?: string[]): SeedProfile;
|
|
22
|
-
declare function generatedUserId(index: number): string;
|
|
23
|
-
//#endregion
|
|
24
|
-
export { HELD_MIGRATIONS_FOLDER, MIGRATIONS_FOLDER, NOW, SEED_EMAILS, SEED_IDS, SeedProfile, generatedUserId, getSeedProfile };
|
package/dist/db/config.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e=`drizzle`,t=`drizzle-hold`,n=new Date(`2026-01-15T12:00:00.000Z`),r={adminUser:`00000000-0000-4000-8000-000000000001`,adminCredentialAccount:`00000000-0000-4000-8000-000000000101`,viewerUser:`00000000-0000-4000-8000-000000000002`,inactiveUser:`00000000-0000-4000-8000-000000000003`,unicodeUser:`00000000-0000-4000-8000-000000000004`,longNameUser:`00000000-0000-4000-8000-000000000005`},i={adminUser:`admin@example.com`,viewerUser:`viewer@example.com`,inactiveUser:`inactive@example.com`,unicodeUser:`unicode@example.com`,longNameUser:`long-name@example.com`};function a(e=process.argv.slice(2)){if(e.includes(`--large`))return`large`;let t=e.find(e=>e.startsWith(`--profile=`))?.slice(10)??`default`;if(t==="default"||t===`large`)return t;throw Error(`Unknown seed profile "${t}". Expected default or large.`)}function o(e){return`00000000-0000-4000-8000-${String(1e3+e).padStart(12,`0`)}`}export{t as HELD_MIGRATIONS_FOLDER,e as MIGRATIONS_FOLDER,n as NOW,i as SEED_EMAILS,r as SEED_IDS,o as generatedUserId,a as getSeedProfile};
|
package/dist/db/drizzle-kit.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
//#region db/drizzle-kit.d.ts
|
|
2
|
-
type DrizzleKitCommand = "generate" | "migrate" | "studio";
|
|
3
|
-
type RunDrizzleKitCommandOptions = {
|
|
4
|
-
env?: NodeJS.ProcessEnv;
|
|
5
|
-
};
|
|
6
|
-
declare function runDrizzleKitCommand(command: DrizzleKitCommand, args?: string[], {
|
|
7
|
-
env
|
|
8
|
-
}?: RunDrizzleKitCommandOptions): Promise<void>;
|
|
9
|
-
//#endregion
|
|
10
|
-
export { runDrizzleKitCommand };
|
package/dist/db/drizzle-kit.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import{readProjectConfig as e}from"../config.js";import{startProjectPostgres as t}from"./local-postgres.js";import n from"../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/usingCtx.js";import r from"node:path";import i from"nano-spawn";import a from"node:process";const o=r.resolve(`node_modules`,`.bin`),s=a.platform===`win32`?`drizzle-kit.cmd`:`drizzle-kit`;async function c(r,i=[],{env:o=a.env}={}){try{var s=n();if((await e()).database?.dialect===`sqlite`){let e=o.TURSO_DATABASE_URL??o.DATABASE_URL;if(!e)throw Error(`TURSO_DATABASE_URL or DATABASE_URL is required for SQLite Drizzle commands.`);await l(i,r,{...o,DATABASE_URL:e});return}await l(i,r,s.a(await t({env:o})).env)}catch(e){s.e=e}finally{await s.d()}}async function l(e,t,n){let a=n.PATH??n.Path??``;await i(s,[t,...e],{env:{...n,PATH:o+r.delimiter+a},stdio:`inherit`})}export{c as runDrizzleKitCommand};
|
package/dist/db/ensure.d.ts
DELETED
package/dist/db/ensure.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import{importProjectModule as e}from"../project.js";import{createLocalPostgresDb as t,startProjectPostgres as n}from"./local-postgres.js";import r from"../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/usingCtx.js";import{SEED_EMAILS as i,SEED_IDS as a}from"./config.js";import{inferSchemaDialect as o,planLocalSchemaPush as s}from"./schema-push.js";import{seedLocalDb as c}from"./seed.js";import{setupLocalDb as l}from"./setup.js";import{eq as u}from"drizzle-orm";async function d(){return{schema:await e(`src/db/schema.ts`)}}async function f(e,{users:t}){let[n]=await e.select({id:t.id}).from(t).where(u(t.email,i.adminUser)).limit(1);return n?.id===a.adminUser}async function p(e,{schema:t}){let n=await s(o(t),t,e);return n.sqlStatements.length===0?(console.log(`Local database schema already in sync`),{appliedStatements:0,plan:n}):(console.log(`Local database schema drift detected; applying ${n.sqlStatements.length} statement(s)`),await n.apply(),console.log(`Local database schema synced`),{appliedStatements:n.sqlStatements.length,plan:n})}async function m({env:e=process.env}={}){try{var i=r();let a=i.a(await n({env:e})).env,o=await d(),s=await t({env:a});try{if(await h(s,o.schema))console.log(`Local database already set up`);else{console.log(`Local database is missing or unseeded; running setup`),await l(`default`,{env:a});return}(await p(s,o)).appliedStatements>0&&!await h(s,o.schema)&&(console.log(`Local database seed data missing after schema sync; running seed`),await c(void 0,{env:a}))}finally{await s.$client.end()}}catch(e){i.e=e}finally{await i.d()}}async function h(e,t){try{return await f(e,t)}catch{return!1}}export{m as ensureLocalDb};
|
package/dist/db/error.d.ts
DELETED
package/dist/db/error.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{DrizzleQueryError as e}from"drizzle-orm/errors";function t(t){if(!(!(t instanceof e)||!t.cause?.message))return`${n(t.message)}\nCause: ${n(t.cause.message)}`}function n(e){return e.split(/\r?\n/,1)[0]||`Unknown error`}export{t as formatDbErrorMessage};
|