@slicemedia/devkit-cli 0.2.0 → 0.3.0

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/discovery.js CHANGED
@@ -5,28 +5,36 @@ const sourceExtensions = new Set([".ts", ".tsx", ".js", ".mjs"]);
5
5
  const namePattern = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
6
6
  export async function discoverAddonEntries(root) {
7
7
  const configured = await readConfig(root);
8
+ const candidates = await discoverCandidates(root);
8
9
  if (configured?.entries !== undefined) {
9
10
  const entries = await Promise.all(configured.entries.map((entry) => normalizeConfiguredEntry(root, entry)));
11
+ // Configured metadata overrides the same source; new public addons remain discoverable.
12
+ const inputs = new Set(entries.map((entry) => path.resolve(root, entry.bundle?.input ?? entry.input)));
13
+ for (const input of candidates) {
14
+ if (publicKind(root, input) && !inputs.has(input))
15
+ entries.push(await entryFromPath(root, input));
16
+ }
17
+ assertUniqueNames(entries);
10
18
  return enrichFromExportedCatalog(root, entries);
11
19
  }
12
- const candidates = await discoverCandidates(root);
13
- const entries = await Promise.all(candidates.map((input) => entryFromPath(input)));
20
+ const entries = await Promise.all(candidates.map((input) => entryFromPath(root, input)));
21
+ assertUniqueNames(entries);
14
22
  return enrichFromExportedCatalog(root, entries);
15
23
  }
16
24
  async function enrichFromExportedCatalog(root, entries) {
17
25
  if (entries.length === 0)
18
26
  return entries;
19
27
  const indexPath = path.join(root, "src", "index.ts");
20
- let source;
28
+ let source = "";
21
29
  try {
22
30
  source = await readFile(indexPath, "utf8");
23
31
  }
24
32
  catch (error) {
25
- if (isMissing(error))
26
- return entries;
27
- throw error;
33
+ if (!isMissing(error))
34
+ throw error;
28
35
  }
29
- if (!/\baddonDefinitions\b/u.test(source))
36
+ const hasCatalog = /\baddonDefinitions\b/u.test(source);
37
+ if (!hasCatalog && !entries.some((entry) => entry.definition))
30
38
  return entries;
31
39
  const server = await createServer({
32
40
  root,
@@ -39,7 +47,7 @@ async function enrichFromExportedCatalog(root, entries) {
39
47
  server: { middlewareMode: true, hmr: false, watch: null },
40
48
  });
41
49
  try {
42
- const loaded = (await server.ssrLoadModule("/src/index.ts"));
50
+ const loaded = (hasCatalog ? await server.ssrLoadModule("/src/index.ts") : { addonDefinitions: [] });
43
51
  if (!Array.isArray(loaded.addonDefinitions)) {
44
52
  throw new Error(`${indexPath} exports addonDefinitions, but it is not an array.`);
45
53
  }
@@ -50,10 +58,23 @@ async function enrichFromExportedCatalog(root, entries) {
50
58
  }
51
59
  definitions.set(candidate.name, candidate);
52
60
  }
53
- return entries.map((entry) => enrichEntry(entry, definitions.get(entry.name)));
61
+ const enriched = [];
62
+ for (const entry of entries) {
63
+ let definition = definitions.get(entry.name);
64
+ if (entry.definition) {
65
+ const module = (await server.ssrLoadModule(path.resolve(root, entry.definition.module).split(path.sep).join("/")));
66
+ const candidate = module[entry.definition.export];
67
+ if (!isRecord(candidate) || candidate.name !== entry.name) {
68
+ throw new Error(`Metadata export ${entry.definition.export} must describe ${entry.name}.`);
69
+ }
70
+ definition = candidate;
71
+ }
72
+ enriched.push(enrichEntry(entry, definition));
73
+ }
74
+ return enriched;
54
75
  }
55
76
  catch (error) {
56
- throw new Error(`Cannot load addonDefinitions from ${indexPath}: ${errorMessage(error)}`, {
77
+ throw new Error(`Cannot load addon metadata: ${errorMessage(error)}`, {
57
78
  cause: error,
58
79
  });
59
80
  }
@@ -86,7 +107,15 @@ function enrichEntry(entry, definition) {
86
107
  description,
87
108
  placement,
88
109
  attributes,
110
+ ...(Array.isArray(definition.attributes)
111
+ ? {
112
+ attributeDetails: definition.attributes
113
+ .filter(isRecord)
114
+ .filter((attribute) => typeof attribute.name === "string"),
115
+ }
116
+ : {}),
89
117
  dependencies,
118
+ ...(definition.usage ? { usage: definition.usage } : {}),
90
119
  ...(isRecord(definition.defaultOptions) && !Array.isArray(definition.defaultOptions)
91
120
  ? { defaultOptions: definition.defaultOptions }
92
121
  : {}),
@@ -111,10 +140,12 @@ async function readConfig(root) {
111
140
  }
112
141
  async function normalizeConfiguredEntry(root, entry) {
113
142
  validateName(entry.name);
143
+ if (entry.kind !== undefined && entry.kind !== "addon" && entry.kind !== "project")
144
+ throw new Error(`Invalid entry kind for ${entry.name}. Expected addon or project.`);
114
145
  const input = path.resolve(root, entry.input);
115
146
  await access(input);
116
147
  const sidecar = await readSidecar(input);
117
- return mergeEntry(entry.name, input, entry, sidecar);
148
+ return withBrowserBundle(root, mergeEntry(entry.name, input, entry, sidecar));
118
149
  }
119
150
  async function discoverCandidates(root) {
120
151
  const sourceRoot = path.join(root, "src");
@@ -125,21 +156,53 @@ async function discoverCandidates(root) {
125
156
  if (!sourceExtensions.has(extension))
126
157
  return false;
127
158
  const relative = path.relative(sourceRoot, file).split(path.sep).join("/");
128
- return (relative.startsWith("entries/") ||
159
+ if (relative.split("/").some((part) => part.startsWith("_") || part.startsWith(".")))
160
+ return false;
161
+ if (/\.(?:test|spec|d)\.[^.]+$/u.test(relative))
162
+ return false;
163
+ return (publicKind(root, file) !== undefined ||
164
+ relative.startsWith("entries/") ||
129
165
  /^[^/]+\/index\.(?:ts|tsx|js|mjs)$/.test(relative) ||
130
166
  /(?:^|\/)addons\/[^/]+\/index\.(?:ts|tsx|js|mjs)$/.test(relative) ||
131
167
  /(?:^|\/)addons\/[^/]+\.entry\.(?:ts|tsx|js|mjs)$/.test(relative));
132
168
  })
133
169
  .sort((left, right) => left.localeCompare(right));
134
170
  }
135
- async function entryFromPath(input) {
171
+ async function entryFromPath(root, input) {
136
172
  const parsed = path.parse(input);
137
173
  const parent = path.basename(parsed.dir);
138
174
  const rawName = parsed.name === "index" ? parent : parsed.name.replace(/\.entry$/, "");
139
175
  const name = kebabCase(rawName);
140
176
  validateName(name);
141
177
  const sidecar = await readSidecar(input);
142
- return mergeEntry(name, input, {}, sidecar);
178
+ return withBrowserBundle(root, mergeEntry(name, input, {}, sidecar));
179
+ }
180
+ function publicKind(root, input) {
181
+ const relative = path.relative(root, input).split(path.sep).join("/");
182
+ const match = /^src\/(addons|projects|entries)\/(?:[^/]+\.(?:ts|tsx|js|mjs)|[^/]+\/index\.(?:ts|tsx|js|mjs))$/u.exec(relative);
183
+ return match ? (match[1] === "projects" ? "project" : "addon") : undefined;
184
+ }
185
+ function withBrowserBundle(root, entry) {
186
+ const kind = entry.kind ?? publicKind(root, entry.input);
187
+ if (!kind)
188
+ return entry;
189
+ return {
190
+ ...entry,
191
+ kind,
192
+ bundle: entry.bundle ?? {
193
+ input: path.relative(root, entry.input).split(path.sep).join("/"),
194
+ scriptFile: `${kind === "project" ? "projects" : "addons"}/${entry.name}.js`,
195
+ cssFile: `${kind === "project" ? "projects" : "addons"}/${entry.name}.css`,
196
+ },
197
+ };
198
+ }
199
+ function assertUniqueNames(entries) {
200
+ const names = new Set();
201
+ for (const entry of entries) {
202
+ if (names.has(entry.name))
203
+ throw new Error(`Duplicate public entry name: ${entry.name}.`);
204
+ names.add(entry.name);
205
+ }
143
206
  }
144
207
  async function readSidecar(input) {
145
208
  const parsed = path.parse(input);
@@ -159,9 +222,12 @@ async function readSidecar(input) {
159
222
  }
160
223
  function mergeEntry(name, input, preferred, fallback) {
161
224
  const metadata = { ...fallback, ...preferred };
225
+ if (metadata.kind !== undefined && metadata.kind !== "addon" && metadata.kind !== "project")
226
+ throw new Error(`Invalid entry kind for ${name}. Expected addon or project.`);
162
227
  return {
163
228
  name,
164
229
  input,
230
+ ...(metadata.kind ? { kind: metadata.kind } : {}),
165
231
  ...(metadata.version === undefined ? {} : { version: metadata.version }),
166
232
  description: metadata.description ?? `Reusable ${name} addon.`,
167
233
  placement: metadata.placement ?? "body-end",
@@ -170,6 +236,10 @@ function mergeEntry(name, input, preferred, fallback) {
170
236
  scriptAttributes: metadata.scriptAttributes ?? {},
171
237
  ...(metadata.defaultOptions === undefined ? {} : { defaultOptions: metadata.defaultOptions }),
172
238
  api: metadata.api ?? { entry: name },
239
+ ...(metadata.usage ? { usage: metadata.usage } : {}),
240
+ ...(metadata.attributeDetails ? { attributeDetails: metadata.attributeDetails } : {}),
241
+ ...(metadata.definition ? { definition: metadata.definition } : {}),
242
+ ...(metadata.bundle ? { bundle: metadata.bundle } : {}),
173
243
  };
174
244
  }
175
245
  async function walkIfPresent(directory) {
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { AddonEntry, ProjectBundle } from "./types.js";
2
+ export interface DocumentationOptions {
3
+ readonly devUrl?: string;
4
+ readonly publicBaseUrl?: string;
5
+ readonly hmr?: boolean;
6
+ readonly bundle?: ProjectBundle;
7
+ }
8
+ export interface DocumentedEntry extends AddonEntry {
9
+ readonly snippets: {
10
+ readonly development?: string;
11
+ readonly production?: string;
12
+ readonly stylesheet?: string;
13
+ };
14
+ }
15
+ export declare function documentEntry(entry: AddonEntry, options?: DocumentationOptions): DocumentedEntry;
16
+ export declare function renderSetupGuide(entry: DocumentedEntry): string;
17
+ export declare function renderCatalog(entries: readonly DocumentedEntry[]): string;
18
+ //# sourceMappingURL=documentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentation.d.ts","sourceRoot":"","sources":["../src/documentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;CACjC;AAED,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;CACH;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE,oBAAyB,GACjC,eAAe,CA0CjB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CA8E/D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,GAAG,MAAM,CAEzE"}
@@ -0,0 +1,139 @@
1
+ export function documentEntry(entry, options = {}) {
2
+ const bundle = options.bundle ?? entry.bundle;
3
+ if (!bundle)
4
+ return { ...entry, snippets: {} };
5
+ const devUrl = baseUrl(options.devUrl ?? "http://localhost:5173");
6
+ const development = [
7
+ ...((options.hmr ?? true)
8
+ ? [
9
+ `<script type="module" src="${escapeHtml(new URL("@vite/client", devUrl).href)}"></script>`,
10
+ ]
11
+ : []),
12
+ `<script type="module" src="${escapeHtml(assetUrl(bundle.input, devUrl))}"></script>`,
13
+ ].join("\n");
14
+ const publicBase = options.publicBaseUrl ? baseUrl(options.publicBaseUrl) : undefined;
15
+ const attributes = Object.entries(entry.scriptAttributes)
16
+ .map(([name, value]) => {
17
+ if (!/^(?:data-[a-z0-9-]+|integrity|crossorigin|nonce|referrerpolicy|fetchpriority|defer|async)$/u.test(name)) {
18
+ throw new Error(`Unsupported script attribute in documentation: ${name}.`);
19
+ }
20
+ return ` ${name}="${escapeHtml(value)}"`;
21
+ })
22
+ .join("");
23
+ return {
24
+ ...entry,
25
+ bundle,
26
+ snippets: {
27
+ development,
28
+ ...(publicBase
29
+ ? {
30
+ production: `<script${entry.placement === "head" && !("defer" in entry.scriptAttributes) ? " defer" : ""} src="${escapeHtml(assetUrl(bundle.scriptFile, publicBase))}"${attributes}></script>`,
31
+ ...(bundle.cssFile
32
+ ? {
33
+ stylesheet: `<link rel="stylesheet" href="${escapeHtml(assetUrl(bundle.cssFile, publicBase))}">`,
34
+ }
35
+ : {}),
36
+ }
37
+ : {}),
38
+ },
39
+ };
40
+ }
41
+ export function renderSetupGuide(entry) {
42
+ const lines = [
43
+ `# ${entry.name}${entry.version ? ` (${entry.version})` : ""}`,
44
+ "",
45
+ entry.description,
46
+ "",
47
+ `Source: ${inline(entry.input)}`,
48
+ `Script placement: ${entry.placement === "head" ? "head, deferred" : "before the closing body tag"}.`,
49
+ "",
50
+ "## Webflow setup",
51
+ "",
52
+ ...(entry.usage?.setup.length
53
+ ? entry.usage.setup.map((step, index) => `${index + 1}. ${step}`)
54
+ : ["No additional setup steps documented."]),
55
+ ];
56
+ if (entry.usage?.markup)
57
+ lines.push("", fence(entry.usage.markup, "html"));
58
+ lines.push("", "## Attributes", "");
59
+ const details = new Map(entry.attributeDetails?.map((attribute) => [attribute.name, attribute]));
60
+ for (const name of entry.attributes) {
61
+ const detail = details.get(name);
62
+ lines.push(`- ${inline(name)}${detail?.required ? " (required)" : ""}${detail?.type ? ` — ${detail.type}` : ""}${detail?.description ? `: ${detail.description}` : ""}${detail?.values ? ` Values: ${detail.values.map(inline).join(", ")}.` : ""}${detail?.option ? ` Maps to option ${inline(detail.option)}.` : ""}`);
63
+ }
64
+ if (entry.attributes.length === 0)
65
+ lines.push("No attributes declared.");
66
+ lines.push("", "## Options and defaults", "");
67
+ const options = Array.isArray(entry.api.options) ? entry.api.options : [];
68
+ for (const value of options) {
69
+ if (typeof value !== "object" || value === null || !("name" in value))
70
+ continue;
71
+ const option = value;
72
+ lines.push(`- ${inline(String(option.name))}${option.required ? " (required)" : ""}${typeof option.type === "string" ? ` — ${option.type}` : ""}${typeof option.description === "string" ? `: ${option.description}` : ""}`);
73
+ }
74
+ lines.push(fence(JSON.stringify(entry.defaultOptions ?? {}, null, 2), "json"));
75
+ lines.push("", "## Runtime API", "", fence(JSON.stringify(entry.api, null, 2), "json"));
76
+ lines.push("", "## Dependencies", "", ...(entry.dependencies.length
77
+ ? entry.dependencies.map((name) => `- ${inline(name)}`)
78
+ : ["No dependencies declared."]));
79
+ lines.push("", "## Local Webflow testing", "");
80
+ if (entry.snippets.development) {
81
+ lines.push("Start the project dev server. Use this snippet only on an approved testing page; remove it before production handoff.", "", fence(entry.snippets.development, "html"));
82
+ }
83
+ else {
84
+ lines.push("This is a reusable source module. Create a browser entry under src/addons/<name>.ts that initializes and registers its API, or declare an explicit browser bundle in devkit.config.json.");
85
+ }
86
+ lines.push("", "## Production handoff", "");
87
+ if (entry.snippets.production) {
88
+ lines.push("Build and deploy this standalone script first. Load it once on each page that needs this enhancement. Other addon scripts are selected independently.", "");
89
+ if (entry.snippets.stylesheet)
90
+ lines.push("Place the stylesheet in the head, when the build emits this CSS file:", "", fence(entry.snippets.stylesheet, "html"), "");
91
+ lines.push(fence(entry.snippets.production, "html"));
92
+ }
93
+ else {
94
+ lines.push("Supply the project's deployed asset base URL with --public-base-url to generate production tags. Hosting is never inferred.");
95
+ }
96
+ if (entry.usage?.notes?.length)
97
+ lines.push("", "## Notes", "", ...entry.usage.notes.map((note) => `- ${note}`));
98
+ return `${lines.join("\n")}\n`;
99
+ }
100
+ export function renderCatalog(entries) {
101
+ return `# Webflow enhancement catalog\n\nGenerated from project configuration and inert addon metadata.\n\n${entries.map((entry) => renderSetupGuide(entry).replace(/^(#{1,5}) /gmu, "#$1 ")).join("\n---\n\n")}`;
102
+ }
103
+ function baseUrl(value) {
104
+ const url = new URL(value);
105
+ if (!["http:", "https:"].includes(url.protocol) ||
106
+ url.username ||
107
+ url.password ||
108
+ url.search ||
109
+ url.hash) {
110
+ throw new Error("Documentation base URLs must use HTTP(S), without credentials, a query, or fragment.");
111
+ }
112
+ if (!url.pathname.endsWith("/"))
113
+ url.pathname += "/";
114
+ return url;
115
+ }
116
+ function assetUrl(value, base) {
117
+ const segments = value.replaceAll("\\", "/").split("/");
118
+ if (segments.some((part) => part === ".." || part === "." || part === "") ||
119
+ /[:?#]/u.test(value)) {
120
+ throw new Error("Documented bundle paths must be relative asset paths without traversal.");
121
+ }
122
+ return new URL(segments.map(encodeURIComponent).join("/"), base).href;
123
+ }
124
+ function escapeHtml(value) {
125
+ return value
126
+ .replaceAll("&", "&amp;")
127
+ .replaceAll('"', "&quot;")
128
+ .replaceAll("<", "&lt;")
129
+ .replaceAll(">", "&gt;");
130
+ }
131
+ function fence(value, language) {
132
+ const marker = "`".repeat(Math.max(3, ...[...value.matchAll(/`+/gu)].map(([run]) => run.length + 1)));
133
+ return `${marker}${language}\n${value}\n${marker}`;
134
+ }
135
+ function inline(value) {
136
+ const marker = value.includes("`") ? "``" : "`";
137
+ return `${marker}${value}${marker}`;
138
+ }
139
+ //# sourceMappingURL=documentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentation.js","sourceRoot":"","sources":["../src/documentation.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,10 @@
1
1
  export { runCli, type CliDependencies } from "./commands.js";
2
2
  export { buildSiteBundle, type BuildSiteBundleOptions, type BuildSiteBundleResult, } from "./build.js";
3
3
  export { discoverAddonEntries } from "./discovery.js";
4
+ export { buildScripts, type BuildScriptsOptions, type BuildScriptsResult, type BuiltScript, } from "./scripts-build.js";
5
+ export { documentEntry, renderCatalog, renderSetupGuide, type DocumentationOptions, type DocumentedEntry, } from "./documentation.js";
4
6
  export { forbiddenTermsFromEnvironment, sanitizeTree, type SanitizeFinding, type SanitizeOptions, type SanitizeResult, } from "./sanitize.js";
5
- export type { AddonEntry, CommandResult } from "./types.js";
7
+ export type { AddonEntry, AttributeDocumentation, CommandResult, EntryUsage, ProjectBundle, } from "./types.js";
6
8
  export { WebflowClient, WebflowHttpError, webflowOAuthTokenFromEnvironment, webflowTokenFromEnvironment, type AppliedScript, type RegisteredScript, type SiteCustomCode, type WebflowComponentProperty, type WebflowClientOptions, type WebflowSite, } from "./webflow/client.js";
7
9
  export { parseRenderedScripts, scanApiScripts, scanRenderedScripts } from "./webflow/scan.js";
8
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EACL,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EACL,6BAA6B,EAC7B,YAAY,EACZ,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,gCAAgC,EAChC,2BAA2B,EAC3B,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,WAAW,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EACL,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,WAAW,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,KAAK,oBAAoB,EACzB,KAAK,eAAe,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,6BAA6B,EAC7B,YAAY,EACZ,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,UAAU,EACV,sBAAsB,EACtB,aAAa,EACb,UAAU,EACV,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,gCAAgC,EAChC,2BAA2B,EAC3B,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,WAAW,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,8 @@
1
1
  export { runCli } from "./commands.js";
2
2
  export { buildSiteBundle, } from "./build.js";
3
3
  export { discoverAddonEntries } from "./discovery.js";
4
+ export { buildScripts, } from "./scripts-build.js";
5
+ export { documentEntry, renderCatalog, renderSetupGuide, } from "./documentation.js";
4
6
  export { forbiddenTermsFromEnvironment, sanitizeTree, } from "./sanitize.js";
5
7
  export { WebflowClient, WebflowHttpError, webflowOAuthTokenFromEnvironment, webflowTokenFromEnvironment, } from "./webflow/client.js";
6
8
  export { parseRenderedScripts, scanApiScripts, scanRenderedScripts } from "./webflow/scan.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAwB,MAAM,eAAe,CAAC;AAC7D,OAAO,EACL,eAAe,GAGhB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EACL,6BAA6B,EAC7B,YAAY,GAIb,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,gCAAgC,EAChC,2BAA2B,GAO5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAwB,MAAM,eAAe,CAAC;AAC7D,OAAO,EACL,eAAe,GAGhB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EACL,YAAY,GAIb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,aAAa,EACb,aAAa,EACb,gBAAgB,GAGjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,6BAA6B,EAC7B,YAAY,GAIb,MAAM,eAAe,CAAC;AAQvB,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,gCAAgC,EAChC,2BAA2B,GAO5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAED,eAAO,MAAM,aAAa,EAAE,YAG3B,CAAC;AAEF,wBAAgB,WAAW,CACzB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,OAAO,EACb,MAAM,GAAE,YAA4B,GACnC,IAAI,CAWN"}
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAED,eAAO,MAAM,aAAa,EAAE,YAG3B,CAAC;AAEF,wBAAgB,WAAW,CACzB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,OAAO,EACb,MAAM,GAAE,YAA4B,GACnC,IAAI,CAsBN"}
package/dist/output.js CHANGED
@@ -4,7 +4,11 @@ export const consoleWriter = {
4
4
  };
5
5
  export function writeResult(result, json, writer = consoleWriter) {
6
6
  if (json) {
7
- writer.info(JSON.stringify(result, null, 2));
7
+ writer.info(JSON.stringify({ ok: result.ok, command: result.command, summary: result.summary, data: result.data }, null, 2));
8
+ return;
9
+ }
10
+ if (result.text !== undefined) {
11
+ writer.info(result.text);
8
12
  return;
9
13
  }
10
14
  const marker = result.ok ? "OK" : "ERROR";
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;IACxC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;CAC3C,CAAC;AAEF,MAAM,UAAU,WAAW,CACzB,MAAqB,EACrB,IAAa,EACb,SAAuB,aAAa;IAEpC,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IAC1C,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAa;IAC/B,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,IAAI,EAAE,CAAC;IACjD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,IAA+B,CAAC;QAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC;QAC5E,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,KAAK,EAAE,CAAC;IACrD,CAAC;IACD,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;IACxC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;CAC3C,CAAC;AAEF,MAAM,UAAU,WAAW,CACzB,MAAqB,EACrB,IAAa,EACb,SAAuB,aAAa;IAEpC,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,SAAS,CACZ,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EACtF,IAAI,EACJ,CAAC,CACF,CACF,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IAC1C,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAa;IAC/B,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,IAAI,EAAE,CAAC;IACjD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,IAA+B,CAAC;QAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC;QAC5E,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,KAAK,EAAE,CAAC;IACrD,CAAC;IACD,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;AACrC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { type ViteBuild } from "./build.js";
2
+ export interface BuildScriptsOptions {
3
+ readonly root: string;
4
+ readonly outDir?: string;
5
+ readonly sourcemap?: boolean;
6
+ readonly build?: ViteBuild;
7
+ }
8
+ export interface BuiltScript {
9
+ readonly name: string;
10
+ readonly kind: "addon" | "project";
11
+ readonly input: string;
12
+ readonly scriptFile: string;
13
+ readonly cssFile?: string;
14
+ readonly scriptPath: string;
15
+ readonly cssPath?: string;
16
+ readonly sourceMapPaths?: readonly string[];
17
+ }
18
+ export interface BuildScriptsResult {
19
+ readonly outDir: string;
20
+ readonly entries: readonly BuiltScript[];
21
+ readonly manifestPath: string;
22
+ }
23
+ /** Each public browser entry is a standalone IIFE with its own optional stylesheet. */
24
+ export declare function buildScripts(options: BuildScriptsOptions): Promise<BuildScriptsResult>;
25
+ //# sourceMappingURL=scripts-build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts-build.d.ts","sourceRoot":"","sources":["../src/scripts-build.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAI7D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,uFAAuF;AACvF,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAyE5F"}
@@ -0,0 +1,110 @@
1
+ import { access, mkdir, realpath, rm, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { buildSiteBundle } from "./build.js";
4
+ import { discoverAddonEntries } from "./discovery.js";
5
+ /** Each public browser entry is a standalone IIFE with its own optional stylesheet. */
6
+ export async function buildScripts(options) {
7
+ const root = path.resolve(options.root);
8
+ const outDir = path.resolve(root, options.outDir ?? "dist");
9
+ const entries = (await discoverAddonEntries(root)).filter((entry) => entry.bundle);
10
+ const outputs = new Set(["webflow-scripts.json"]);
11
+ const planned = entries.map((entry) => planEntry(root, entry));
12
+ for (const entry of planned) {
13
+ for (const output of [entry.scriptFile, entry.cssFile]) {
14
+ const normalized = output.toLowerCase();
15
+ if ([...outputs].some((existing) => existing === normalized ||
16
+ existing.startsWith(`${normalized}/`) ||
17
+ normalized.startsWith(`${existing}/`)))
18
+ throw new Error(`Duplicate build output: ${output}.`);
19
+ outputs.add(output.toLowerCase());
20
+ }
21
+ await access(entry.input);
22
+ }
23
+ // Validate the complete plan before clearing output. Never erase source or private artifacts.
24
+ const canonicalOutput = await resolveRealPath(outDir);
25
+ const protectedPaths = [
26
+ root,
27
+ path.join(root, "src"),
28
+ path.join(root, ".slicemedia"),
29
+ path.join(root, "node_modules"),
30
+ ...planned.map((entry) => entry.input),
31
+ ];
32
+ for (const target of protectedPaths) {
33
+ const canonicalTarget = await resolveRealPath(target);
34
+ if (contains(canonicalOutput, canonicalTarget) ||
35
+ (target !== root && contains(canonicalTarget, canonicalOutput))) {
36
+ throw new Error("Build output must be separate from project source, dependencies, and private storage.");
37
+ }
38
+ }
39
+ await rm(outDir, { recursive: true, force: true });
40
+ await mkdir(outDir, { recursive: true });
41
+ const built = [];
42
+ for (const entry of planned) {
43
+ const result = await buildSiteBundle({
44
+ root,
45
+ entry: entry.input,
46
+ outDir: path.join(outDir, path.posix.dirname(entry.scriptFile)),
47
+ scriptFileName: path.posix.basename(entry.scriptFile),
48
+ cssFileName: path.posix.basename(entry.cssFile),
49
+ emptyOutDir: false,
50
+ ...(options.sourcemap === undefined ? {} : { sourcemap: options.sourcemap }),
51
+ ...(options.build ? { build: options.build } : {}),
52
+ });
53
+ built.push({
54
+ name: entry.name,
55
+ kind: entry.kind,
56
+ input: path.relative(root, entry.input).split(path.sep).join("/"),
57
+ scriptFile: entry.scriptFile,
58
+ scriptPath: result.scriptPath,
59
+ ...(result.cssPath ? { cssFile: entry.cssFile, cssPath: result.cssPath } : {}),
60
+ ...(result.sourceMapPaths ? { sourceMapPaths: result.sourceMapPaths } : {}),
61
+ });
62
+ }
63
+ const manifestPath = path.join(outDir, "webflow-scripts.json");
64
+ // Public manifest contains public paths only; never private map locations or source contents.
65
+ await writeFile(manifestPath, `${JSON.stringify({ schemaVersion: 1, entries: built.map(({ name, kind, input, scriptFile, cssFile }) => ({ name, kind, input, bundle: { input, scriptFile, ...(cssFile ? { cssFile } : {}) } })) }, null, 2)}\n`);
66
+ return { outDir, entries: built, manifestPath };
67
+ }
68
+ function planEntry(root, entry) {
69
+ const bundle = entry.bundle;
70
+ const scriptFile = outputPath(bundle.scriptFile, ".js");
71
+ const cssFile = outputPath(bundle.cssFile ?? scriptFile.replace(/\.js$/u, ".css"), ".css");
72
+ if (path.posix.dirname(scriptFile) !== path.posix.dirname(cssFile)) {
73
+ throw new Error(`Script and stylesheet must share an output directory: ${entry.name}.`);
74
+ }
75
+ return {
76
+ name: entry.name,
77
+ kind: entry.kind ?? "addon",
78
+ input: path.resolve(root, bundle.input),
79
+ scriptFile,
80
+ cssFile,
81
+ };
82
+ }
83
+ function outputPath(value, extension) {
84
+ if (!value.endsWith(extension) ||
85
+ value.split("/").some((part) => !/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/u.test(part)) ||
86
+ value.includes("\\") ||
87
+ path.isAbsolute(value)) {
88
+ throw new Error(`Build output must be a relative ${extension} path without traversal: ${value}.`);
89
+ }
90
+ return value;
91
+ }
92
+ function contains(parent, child) {
93
+ const relative = path.relative(parent, child);
94
+ return (relative === "" ||
95
+ (!relative.startsWith(`..${path.sep}`) && relative !== ".." && !path.isAbsolute(relative)));
96
+ }
97
+ async function resolveRealPath(target) {
98
+ try {
99
+ return await realpath(target);
100
+ }
101
+ catch (error) {
102
+ if (typeof error !== "object" ||
103
+ error === null ||
104
+ !("code" in error) ||
105
+ error.code !== "ENOENT")
106
+ throw error;
107
+ return path.join(await resolveRealPath(path.dirname(target)), path.basename(target));
108
+ }
109
+ }
110
+ //# sourceMappingURL=scripts-build.js.map