Skip to content

Commit 2d8bca9

Browse files
add custom static asset replacement support for vanilla fast preview before asset fetch
1 parent 565e05d commit 2d8bca9

4 files changed

Lines changed: 87 additions & 13 deletions

File tree

editor/scaffolds/editor/editor.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,15 @@ export function Editor() {
150150
input: _input,
151151
build_config: build_config,
152152
framework: vanilla_presets.vanilla_default,
153-
asset_config: { skip_asset_replacement: true },
153+
asset_config: {
154+
skip_asset_replacement: false,
155+
asset_repository: MainImageRepository.instance,
156+
custom_asset_replacement: {
157+
type: "static",
158+
resource:
159+
"https://bridged-service-static.s3.us-west-1.amazonaws.com/placeholder-images/image-placeholder-bw-tile-100.png",
160+
},
161+
},
154162
}).then(on_preview_result);
155163

156164
designToCode({

externals/design-sdk

packages/designto-code/universal/design-to-code.ts

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ import { reusable } from "@code-features/component";
1717
interface AssetsConfig {
1818
asset_repository?: BaseImageRepositories<string>;
1919
skip_asset_replacement?: boolean;
20+
/**
21+
* this is currently only supported on vanilla framework - for preview.
22+
*/
23+
custom_asset_replacement?: { type: "static"; resource: string };
2024
}
2125

2226
export type Result = output.ICodeOutput & { widget: Widget };
@@ -227,13 +231,30 @@ export async function designToVanilla({
227231
// ------------------------------------------------------------------------
228232
// finilize temporary assets
229233
// this should be placed somewhere else
230-
if (asset_config?.asset_repository && !asset_config.skip_asset_replacement) {
231-
const assets = await fetch_all_assets(asset_config.asset_repository);
232-
res.code.raw = dangerous_temporary_asset_replacer(res.code.raw, assets);
233-
res.scaffold.raw = dangerous_temporary_asset_replacer(
234+
if (asset_config.custom_asset_replacement) {
235+
const keys = Object.keys(asset_config.asset_repository.mergeAll());
236+
res.code.raw = dangerous_custom_static_resource_replacer(
237+
res.code.raw,
238+
keys,
239+
asset_config.custom_asset_replacement.resource
240+
);
241+
res.scaffold.raw = dangerous_custom_static_resource_replacer(
234242
res.scaffold.raw,
235-
assets
243+
keys,
244+
asset_config.custom_asset_replacement.resource
236245
);
246+
} else {
247+
if (
248+
asset_config?.asset_repository &&
249+
!asset_config.skip_asset_replacement
250+
) {
251+
const assets = await fetch_all_assets(asset_config.asset_repository);
252+
res.code.raw = dangerous_temporary_asset_replacer(res.code.raw, assets);
253+
res.scaffold.raw = dangerous_temporary_asset_replacer(
254+
res.scaffold.raw,
255+
assets
256+
);
257+
}
237258
}
238259
// ------------------------------------------------------------------------
239260

@@ -249,3 +270,19 @@ const dangerous_temporary_asset_replacer = (r, a) => {
249270
{ fallback: k.image_smallest_fallback_source_base_64 }
250271
);
251272
};
273+
274+
const dangerous_custom_static_resource_replacer = (
275+
code: string,
276+
keys: string[],
277+
staticres: string
278+
) => {
279+
return finalize_temporary_assets_with_prefixed_static_string_keys__dangerously(
280+
code,
281+
default_asset_replacement_prefix,
282+
{
283+
replacer: (k) => staticres,
284+
keys,
285+
},
286+
{ fallback: k.image_smallest_fallback_source_base_64 }
287+
);
288+
};

packages/support-assets/finalize-after-final-build-with-static-string--dangerous/index.ts

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
type AssetStringReplacementMap =
22
| { [key: string]: string }
3-
| Map<string, string>;
3+
| Map<string, string>
4+
| CustomReplacement;
5+
6+
type CustomReplacement = {
7+
keys: string[];
8+
replacer: (key) => string;
9+
};
410

511
/**
612
* this replaces the asset strings in the given string with the given map
@@ -48,10 +54,33 @@ export function finalize_temporary_assets_with_prefixed_static_string_keys__dang
4854
fallback: string;
4955
}
5056
) {
51-
Object.keys(assets).forEach((key) => {
52-
const _replacement_key = `${prefix || ""}${key}`;
53-
const _replacement_target = assets[key] || safety.fallback;
54-
code = code.replace(new RegExp(_replacement_key, "g"), _replacement_target);
55-
});
57+
const _is_custom_replacement = "keys" in assets; // CustomReplacement;
58+
const get = _is_custom_replacement
59+
? (key: string) => (assets as CustomReplacement).replacer(key)
60+
: (key: string) => assets[key];
61+
62+
const _replacementkey = (key) => `${prefix || ""}${key}`;
63+
64+
if (_is_custom_replacement) {
65+
// we need to replace all keys
66+
const keys = (assets as CustomReplacement).keys;
67+
for (let i = 0; i < keys.length; i++) {
68+
const key = keys[i];
69+
const _replacement_key = _replacementkey(key);
70+
code = code.replace(
71+
new RegExp(_replacement_key, "g"),
72+
get(key) || safety.fallback
73+
);
74+
}
75+
} else {
76+
Object.keys(assets).forEach((key) => {
77+
const _replacement_key = _replacementkey(key);
78+
const _replacement_target = get(key) || safety.fallback;
79+
code = code.replace(
80+
new RegExp(_replacement_key, "g"),
81+
_replacement_target
82+
);
83+
});
84+
}
5685
return code;
5786
}

0 commit comments

Comments
 (0)