@sparkletree/cli 0.5.0 → 0.6.1
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/README.md +4 -4
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +12 -57
- package/dist/registry.js.map +1 -1
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +81 -0
- package/dist/upgrade.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ sparkletree help
|
|
|
24
24
|
|
|
25
25
|
`upgrade` ports hero/cta copies made by a 0.3.0 `add` to the 0.4.0 reservation
|
|
26
26
|
wiring (the hold now reserves space with your fallback instead of rendering
|
|
27
|
-
nothing
|
|
27
|
+
nothing; see LAYOUT-DOCTRINE.md in the repo). It rewrites a copy only where
|
|
28
28
|
it still matches the 0.3.0 template exactly, ignoring the Tailwind classes you
|
|
29
29
|
were invited to change; a copy edited where the wiring lands is left untouched
|
|
30
30
|
and reported, never guessed at. `--dry-run` previews the verdicts.
|
|
@@ -36,7 +36,7 @@ and reported, never guessed at. `--dry-run` previews the verdicts.
|
|
|
36
36
|
| `--force` | Overwrite files that already exist. |
|
|
37
37
|
| `--dry-run` | Show what would happen; write nothing. |
|
|
38
38
|
|
|
39
|
-
Dependencies between components are resolved for you
|
|
39
|
+
Dependencies between components are resolved for you: asking for `hero` also
|
|
40
40
|
writes `provider` if you don't have it yet.
|
|
41
41
|
|
|
42
42
|
## Components
|
|
@@ -49,12 +49,12 @@ writes `provider` if you don't have it yet.
|
|
|
49
49
|
| `copy-card` | A text card. |
|
|
50
50
|
| `product-card` | A product card with image, name, description and price. |
|
|
51
51
|
|
|
52
|
-
The default classes use Tailwind CSS. Restyle or restructure however you like
|
|
52
|
+
The default classes use Tailwind CSS. Restyle or restructure however you like;
|
|
53
53
|
the files are yours.
|
|
54
54
|
|
|
55
55
|
## Your copies survive protocol changes
|
|
56
56
|
|
|
57
|
-
The copied files contain only markup and presentation
|
|
57
|
+
The copied files contain only markup and presentation: no endpoints, event
|
|
58
58
|
formats, or timing constants. Everything that talks to SparkleTree's servers
|
|
59
59
|
lives in `@sparkletree/react` and `@sparkletree/core`. When the protocol
|
|
60
60
|
evolves, you update those packages through npm like any other dependency, and
|
package/dist/registry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3C,mCAAmC;IACnC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,mDAAmD;IACnD,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3C,mCAAmC;IACnC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,mDAAmD;IACnD,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC;AAsVD,eAAO,MAAM,QAAQ,EAAE,SAAS,iBAAiB,EAoChD,CAAC;AAEF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEzE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAe5E"}
|
package/dist/registry.js
CHANGED
|
@@ -24,16 +24,18 @@ const HERO_TSX = `"use client";
|
|
|
24
24
|
|
|
25
25
|
import { StreamText, useIsland, withReserve, type UseIslandOptions } from "@sparkletree/react";
|
|
26
26
|
import type { FieldState } from "@sparkletree/react";
|
|
27
|
-
import { themeStyle } from "@sparkletree/core";
|
|
27
|
+
import { safeActionUrl, themeStyle } from "@sparkletree/core";
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
30
|
* Your hero. Edit freely — this file is yours.
|
|
31
31
|
*
|
|
32
32
|
* What you should NOT need to touch, and what you will not find here: when the
|
|
33
|
-
* copy paints, how long it holds, whether it types or lands composed, and
|
|
34
|
-
*
|
|
33
|
+
* copy paints, how long it holds, whether it types or lands composed, and the
|
|
34
|
+
* provenance every adapted field carries. All of that lives in
|
|
35
35
|
* @sparkletree/core and @sparkletree/react so it can be fixed for you without
|
|
36
|
-
* you re-copying this file.
|
|
36
|
+
* you re-copying this file. No visible AI-disclosure mark renders by default —
|
|
37
|
+
* if you want one, render \`InlineMark\` from @sparkletree/react where
|
|
38
|
+
* \`decideChrome(field.source, prefersStandard).marked\` is true.
|
|
37
39
|
*
|
|
38
40
|
* \`fallback\` is required. There is no loading state and no skeleton: if the
|
|
39
41
|
* network is slow or the campaign is unreachable, this copy is what your
|
|
@@ -47,30 +49,6 @@ export interface HeroProps {
|
|
|
47
49
|
fallback: UseIslandOptions["fallback"];
|
|
48
50
|
}
|
|
49
51
|
|
|
50
|
-
/**
|
|
51
|
-
* Server-driven URLs are configuration, not trust. Only http(s), mailto and
|
|
52
|
-
* tel absolutes and relative navigations ("/", "./", "#", "?") pass; anything
|
|
53
|
-
* else — javascript:, data:, an unprefixed string — is dropped.
|
|
54
|
-
*/
|
|
55
|
-
function safeActionUrl(url: string | null | undefined): string | undefined {
|
|
56
|
-
if (!url) return undefined;
|
|
57
|
-
if (
|
|
58
|
-
(url.startsWith("/") && !url.startsWith("//")) ||
|
|
59
|
-
url.startsWith("./") ||
|
|
60
|
-
url.startsWith("#") ||
|
|
61
|
-
url.startsWith("?")
|
|
62
|
-
) {
|
|
63
|
-
return url;
|
|
64
|
-
}
|
|
65
|
-
try {
|
|
66
|
-
const protocol = new URL(url).protocol;
|
|
67
|
-
if (["https:", "http:", "mailto:", "tel:"].includes(protocol)) return url;
|
|
68
|
-
} catch {
|
|
69
|
-
// Not a parseable URL at all.
|
|
70
|
-
}
|
|
71
|
-
return undefined;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
52
|
export function Hero({ campaignId, fallback }: HeroProps) {
|
|
75
53
|
const { state, ref } = useIsland({ campaignId, island: "hero", fallback });
|
|
76
54
|
const backgroundImage = safeActionUrl(state.backgroundImage);
|
|
@@ -131,7 +109,7 @@ export function Hero({ campaignId, fallback }: HeroProps) {
|
|
|
131
109
|
const CTA_TSX = `"use client";
|
|
132
110
|
|
|
133
111
|
import { StreamText, useIsland, useSparkletree, withReserve, type UseIslandOptions } from "@sparkletree/react";
|
|
134
|
-
import { readableTextColor, themeStyle, track } from "@sparkletree/core";
|
|
112
|
+
import { readableTextColor, safeActionUrl, themeStyle, track } from "@sparkletree/core";
|
|
135
113
|
|
|
136
114
|
/**
|
|
137
115
|
* Your call to action. Edit freely.
|
|
@@ -147,30 +125,6 @@ export interface CtaProps extends Omit<UseIslandOptions, "island"> {
|
|
|
147
125
|
onClick?: () => void;
|
|
148
126
|
}
|
|
149
127
|
|
|
150
|
-
/**
|
|
151
|
-
* Server-driven URLs are configuration, not trust. Only http(s), mailto and
|
|
152
|
-
* tel absolutes and relative navigations ("/", "./", "#", "?") pass; anything
|
|
153
|
-
* else — javascript:, data:, an unprefixed string — is dropped.
|
|
154
|
-
*/
|
|
155
|
-
function safeActionUrl(url: string | null | undefined): string | undefined {
|
|
156
|
-
if (!url) return undefined;
|
|
157
|
-
if (
|
|
158
|
-
(url.startsWith("/") && !url.startsWith("//")) ||
|
|
159
|
-
url.startsWith("./") ||
|
|
160
|
-
url.startsWith("#") ||
|
|
161
|
-
url.startsWith("?")
|
|
162
|
-
) {
|
|
163
|
-
return url;
|
|
164
|
-
}
|
|
165
|
-
try {
|
|
166
|
-
const protocol = new URL(url).protocol;
|
|
167
|
-
if (["https:", "http:", "mailto:", "tel:"].includes(protocol)) return url;
|
|
168
|
-
} catch {
|
|
169
|
-
// Not a parseable URL at all.
|
|
170
|
-
}
|
|
171
|
-
return undefined;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
128
|
export function Cta(props: CtaProps) {
|
|
175
129
|
const { href, onClick, ...islandOptions } = props;
|
|
176
130
|
const { apiBase, organizationId } = useSparkletree();
|
|
@@ -261,8 +215,8 @@ const COPY_CARD_TSX = `import { StreamText, staticField, type ContentSource } fr
|
|
|
261
215
|
* A copy card fed by /content rather than a stream.
|
|
262
216
|
*
|
|
263
217
|
* \`contentSource\` comes from the /content response's meta. Pass it through —
|
|
264
|
-
* do not default it to "generated"
|
|
265
|
-
*
|
|
218
|
+
* do not default it to "generated", and do not hardcode "static". The
|
|
219
|
+
* provenance stamp (and any \`InlineMark\` you opt into) follows it, and both
|
|
266
220
|
* shortcuts make it say something untrue.
|
|
267
221
|
*
|
|
268
222
|
* \`staticField\` builds the field object for you. Keep using it rather than
|
|
@@ -300,8 +254,9 @@ const PRODUCT_CARD_TSX = `import { StreamText, staticField, type ContentSource }
|
|
|
300
254
|
*
|
|
301
255
|
* Note that the name and price are always "static": they come from your
|
|
302
256
|
* catalogue, not from a model. Only the description can be adapted, so only
|
|
303
|
-
* the description
|
|
304
|
-
* straightforward falsehood about
|
|
257
|
+
* the description carries adapted provenance (and any mark you opt into) —
|
|
258
|
+
* claiming a price as adapted would be a straightforward falsehood about
|
|
259
|
+
* the price.
|
|
305
260
|
*
|
|
306
261
|
* \`staticField\` builds the field object for you. Keep using it rather than
|
|
307
262
|
* writing the object literal yourself: the field's shape belongs to the npm
|
package/dist/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAaH,MAAM,QAAQ,GAAG
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/upgrade.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH,UAAU,IAAI;IACZ,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAsBD,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH,UAAU,IAAI;IACZ,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAsBD,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,EAmKnD,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,yEAAyE;IACzE,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;IAC9C;;;;;;OAMG;IACH,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAmCD,wBAAsB,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAoDlF;AAED,mEAAmE;AACnE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,UAAQ,GAAG,MAAM,CA4CjF"}
|
package/dist/upgrade.js
CHANGED
|
@@ -47,12 +47,59 @@ export const UPGRADE_TARGETS = [
|
|
|
47
47
|
path: "sparkletree/hero.tsx",
|
|
48
48
|
marker: "withReserve",
|
|
49
49
|
hunks: [
|
|
50
|
+
{
|
|
51
|
+
label: "disclosure note",
|
|
52
|
+
find: ` * copy paints, how long it holds, whether it types or lands composed, and
|
|
53
|
+
* whether it carries the adaptation mark. All of that lives in
|
|
54
|
+
* @sparkletree/core and @sparkletree/react so it can be fixed for you without
|
|
55
|
+
* you re-copying this file.`,
|
|
56
|
+
replace: ` * copy paints, how long it holds, whether it types or lands composed, and the
|
|
57
|
+
* provenance every adapted field carries. All of that lives in
|
|
58
|
+
* @sparkletree/core and @sparkletree/react so it can be fixed for you without
|
|
59
|
+
* you re-copying this file. No visible AI-disclosure mark renders by default —
|
|
60
|
+
* if you want one, render \`InlineMark\` from @sparkletree/react where
|
|
61
|
+
* \`decideChrome(field.source, prefersStandard).marked\` is true.`,
|
|
62
|
+
},
|
|
50
63
|
{
|
|
51
64
|
label: "imports",
|
|
52
65
|
find: `import { StreamText, useIsland, type UseIslandOptions } from "@sparkletree/react";`,
|
|
53
66
|
replace: `import { StreamText, useIsland, withReserve, type UseIslandOptions } from "@sparkletree/react";
|
|
54
67
|
import type { FieldState } from "@sparkletree/react";`,
|
|
55
68
|
},
|
|
69
|
+
{
|
|
70
|
+
label: "core imports",
|
|
71
|
+
find: `import { themeStyle } from "@sparkletree/core";`,
|
|
72
|
+
replace: `import { safeActionUrl, themeStyle } from "@sparkletree/core";`,
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
label: "shared safeActionUrl",
|
|
76
|
+
find: `/**
|
|
77
|
+
* Server-driven URLs are configuration, not trust. Only http(s), mailto and
|
|
78
|
+
* tel absolutes and relative navigations ("/", "./", "#", "?") pass; anything
|
|
79
|
+
* else — javascript:, data:, an unprefixed string — is dropped.
|
|
80
|
+
*/
|
|
81
|
+
function safeActionUrl(url: string | null | undefined): string | undefined {
|
|
82
|
+
if (!url) return undefined;
|
|
83
|
+
if (
|
|
84
|
+
(url.startsWith("/") && !url.startsWith("//")) ||
|
|
85
|
+
url.startsWith("./") ||
|
|
86
|
+
url.startsWith("#") ||
|
|
87
|
+
url.startsWith("?")
|
|
88
|
+
) {
|
|
89
|
+
return url;
|
|
90
|
+
}
|
|
91
|
+
try {
|
|
92
|
+
const protocol = new URL(url).protocol;
|
|
93
|
+
if (["https:", "http:", "mailto:", "tel:"].includes(protocol)) return url;
|
|
94
|
+
} catch {
|
|
95
|
+
// Not a parseable URL at all.
|
|
96
|
+
}
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
`,
|
|
101
|
+
replace: ``,
|
|
102
|
+
},
|
|
56
103
|
{
|
|
57
104
|
label: "reservation helpers",
|
|
58
105
|
find: `const backgroundImage = safeActionUrl(state.backgroundImage);`,
|
|
@@ -97,6 +144,40 @@ ${HERO_RESERVATION}`,
|
|
|
97
144
|
find: `import { StreamText, useIsland, useSparkletree, type UseIslandOptions } from "@sparkletree/react";`,
|
|
98
145
|
replace: `import { StreamText, useIsland, useSparkletree, withReserve, type UseIslandOptions } from "@sparkletree/react";`,
|
|
99
146
|
},
|
|
147
|
+
{
|
|
148
|
+
label: "core imports",
|
|
149
|
+
find: `import { readableTextColor, themeStyle, track } from "@sparkletree/core";`,
|
|
150
|
+
replace: `import { readableTextColor, safeActionUrl, themeStyle, track } from "@sparkletree/core";`,
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
label: "shared safeActionUrl",
|
|
154
|
+
find: `/**
|
|
155
|
+
* Server-driven URLs are configuration, not trust. Only http(s), mailto and
|
|
156
|
+
* tel absolutes and relative navigations ("/", "./", "#", "?") pass; anything
|
|
157
|
+
* else — javascript:, data:, an unprefixed string — is dropped.
|
|
158
|
+
*/
|
|
159
|
+
function safeActionUrl(url: string | null | undefined): string | undefined {
|
|
160
|
+
if (!url) return undefined;
|
|
161
|
+
if (
|
|
162
|
+
(url.startsWith("/") && !url.startsWith("//")) ||
|
|
163
|
+
url.startsWith("./") ||
|
|
164
|
+
url.startsWith("#") ||
|
|
165
|
+
url.startsWith("?")
|
|
166
|
+
) {
|
|
167
|
+
return url;
|
|
168
|
+
}
|
|
169
|
+
try {
|
|
170
|
+
const protocol = new URL(url).protocol;
|
|
171
|
+
if (["https:", "http:", "mailto:", "tel:"].includes(protocol)) return url;
|
|
172
|
+
} catch {
|
|
173
|
+
// Not a parseable URL at all.
|
|
174
|
+
}
|
|
175
|
+
return undefined;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
`,
|
|
179
|
+
replace: ``,
|
|
180
|
+
},
|
|
100
181
|
{
|
|
101
182
|
label: "reservation helpers",
|
|
102
183
|
find: ` onClick?.();
|
package/dist/upgrade.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"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"}
|