@hyperframes/core 0.7.14 → 0.7.16

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.
Files changed (240) hide show
  1. package/dist/compiler/staticGuard.js +1 -1
  2. package/dist/compiler/staticGuard.js.map +1 -1
  3. package/dist/core.types.d.ts +2 -369
  4. package/dist/core.types.d.ts.map +1 -1
  5. package/dist/core.types.js +1 -84
  6. package/dist/core.types.js.map +1 -1
  7. package/dist/generated/runtime-inline.js.map +1 -1
  8. package/dist/generators/hyperframes.d.ts +1 -1
  9. package/dist/generators/hyperframes.d.ts.map +1 -1
  10. package/dist/generators/hyperframes.js +1 -1
  11. package/dist/generators/hyperframes.js.map +1 -1
  12. package/dist/hyperframe.runtime.iife.js +20 -20
  13. package/dist/index.d.ts +5 -7
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +7 -4
  16. package/dist/index.js.map +1 -1
  17. package/dist/lint/index.d.ts +2 -2
  18. package/dist/lint/index.d.ts.map +1 -1
  19. package/dist/lint/index.js +2 -1
  20. package/dist/lint/index.js.map +1 -1
  21. package/dist/parsers/gsapConstants.d.ts +2 -12
  22. package/dist/parsers/gsapConstants.d.ts.map +1 -1
  23. package/dist/parsers/gsapConstants.js +2 -110
  24. package/dist/parsers/gsapConstants.js.map +1 -1
  25. package/dist/parsers/gsapParserAcorn.d.ts +2 -48
  26. package/dist/parsers/gsapParserAcorn.d.ts.map +1 -1
  27. package/dist/parsers/gsapParserAcorn.js +2 -1057
  28. package/dist/parsers/gsapParserAcorn.js.map +1 -1
  29. package/dist/parsers/gsapParserExports.d.ts +2 -20
  30. package/dist/parsers/gsapParserExports.d.ts.map +1 -1
  31. package/dist/parsers/gsapParserExports.js +2 -8
  32. package/dist/parsers/gsapParserExports.js.map +1 -1
  33. package/dist/parsers/gsapWriterAcorn.d.ts +2 -90
  34. package/dist/parsers/gsapWriterAcorn.d.ts.map +1 -1
  35. package/dist/parsers/gsapWriterAcorn.js +2 -2016
  36. package/dist/parsers/gsapWriterAcorn.js.map +1 -1
  37. package/dist/parsers/hfIds.d.ts +2 -16
  38. package/dist/parsers/hfIds.d.ts.map +1 -1
  39. package/dist/parsers/hfIds.js +2 -127
  40. package/dist/parsers/hfIds.js.map +1 -1
  41. package/dist/parsers/springEase.d.ts +2 -28
  42. package/dist/parsers/springEase.d.ts.map +1 -1
  43. package/dist/parsers/springEase.js +2 -69
  44. package/dist/parsers/springEase.js.map +1 -1
  45. package/dist/slideshow/index.d.ts +1 -0
  46. package/dist/slideshow/index.d.ts.map +1 -1
  47. package/dist/slideshow/index.js +1 -0
  48. package/dist/slideshow/index.js.map +1 -1
  49. package/dist/studio-api/helpers/draftMarkers.d.ts +2 -10
  50. package/dist/studio-api/helpers/draftMarkers.d.ts.map +1 -1
  51. package/dist/studio-api/helpers/draftMarkers.js +2 -10
  52. package/dist/studio-api/helpers/draftMarkers.js.map +1 -1
  53. package/dist/studio-api/helpers/finiteMutation.d.ts +2 -10
  54. package/dist/studio-api/helpers/finiteMutation.d.ts.map +1 -1
  55. package/dist/studio-api/helpers/finiteMutation.js +2 -20
  56. package/dist/studio-api/helpers/finiteMutation.js.map +1 -1
  57. package/dist/studio-api/helpers/manualEditsRenderScript.d.ts +2 -12
  58. package/dist/studio-api/helpers/manualEditsRenderScript.d.ts.map +1 -1
  59. package/dist/studio-api/helpers/manualEditsRenderScript.js +2 -632
  60. package/dist/studio-api/helpers/manualEditsRenderScript.js.map +1 -1
  61. package/dist/studio-api/helpers/screenshotClip.d.ts +2 -7
  62. package/dist/studio-api/helpers/screenshotClip.d.ts.map +1 -1
  63. package/dist/studio-api/helpers/screenshotClip.js +2 -21
  64. package/dist/studio-api/helpers/screenshotClip.js.map +1 -1
  65. package/dist/studio-api/helpers/studioMotionRenderScript.d.ts +2 -8
  66. package/dist/studio-api/helpers/studioMotionRenderScript.d.ts.map +1 -1
  67. package/dist/studio-api/helpers/studioMotionRenderScript.js +2 -207
  68. package/dist/studio-api/helpers/studioMotionRenderScript.js.map +1 -1
  69. package/dist/studio-api/index.d.ts +2 -9
  70. package/dist/studio-api/index.d.ts.map +1 -1
  71. package/dist/studio-api/index.js +2 -8
  72. package/dist/studio-api/index.js.map +1 -1
  73. package/package.json +16 -18
  74. package/dist/generated/runtime-inline.js +0 -11
  75. package/dist/hyperframe.manifest.json +0 -22
  76. package/dist/hyperframe.runtime.mjs +0 -325
  77. package/dist/lint/context.d.ts +0 -17
  78. package/dist/lint/context.d.ts.map +0 -1
  79. package/dist/lint/context.js +0 -37
  80. package/dist/lint/context.js.map +0 -1
  81. package/dist/lint/hyperframeLinter.d.ts +0 -14
  82. package/dist/lint/hyperframeLinter.d.ts.map +0 -1
  83. package/dist/lint/hyperframeLinter.js +0 -132
  84. package/dist/lint/hyperframeLinter.js.map +0 -1
  85. package/dist/lint/rules/adapters.d.ts +0 -3
  86. package/dist/lint/rules/adapters.d.ts.map +0 -1
  87. package/dist/lint/rules/adapters.js +0 -40
  88. package/dist/lint/rules/adapters.js.map +0 -1
  89. package/dist/lint/rules/captions.d.ts +0 -3
  90. package/dist/lint/rules/captions.d.ts.map +0 -1
  91. package/dist/lint/rules/captions.js +0 -242
  92. package/dist/lint/rules/captions.js.map +0 -1
  93. package/dist/lint/rules/composition.d.ts +0 -5
  94. package/dist/lint/rules/composition.d.ts.map +0 -1
  95. package/dist/lint/rules/composition.js +0 -694
  96. package/dist/lint/rules/composition.js.map +0 -1
  97. package/dist/lint/rules/core.d.ts +0 -3
  98. package/dist/lint/rules/core.d.ts.map +0 -1
  99. package/dist/lint/rules/core.js +0 -432
  100. package/dist/lint/rules/core.js.map +0 -1
  101. package/dist/lint/rules/fonts.d.ts +0 -3
  102. package/dist/lint/rules/fonts.d.ts.map +0 -1
  103. package/dist/lint/rules/fonts.js +0 -205
  104. package/dist/lint/rules/fonts.js.map +0 -1
  105. package/dist/lint/rules/gsap.d.ts +0 -4
  106. package/dist/lint/rules/gsap.d.ts.map +0 -1
  107. package/dist/lint/rules/gsap.js +0 -1039
  108. package/dist/lint/rules/gsap.js.map +0 -1
  109. package/dist/lint/rules/media.d.ts +0 -3
  110. package/dist/lint/rules/media.d.ts.map +0 -1
  111. package/dist/lint/rules/media.js +0 -491
  112. package/dist/lint/rules/media.js.map +0 -1
  113. package/dist/lint/rules/slideshow.d.ts +0 -4
  114. package/dist/lint/rules/slideshow.d.ts.map +0 -1
  115. package/dist/lint/rules/slideshow.js +0 -74
  116. package/dist/lint/rules/slideshow.js.map +0 -1
  117. package/dist/lint/rules/textures.d.ts +0 -3
  118. package/dist/lint/rules/textures.d.ts.map +0 -1
  119. package/dist/lint/rules/textures.js +0 -192
  120. package/dist/lint/rules/textures.js.map +0 -1
  121. package/dist/lint/types.d.ts +0 -36
  122. package/dist/lint/types.d.ts.map +0 -1
  123. package/dist/lint/types.js +0 -2
  124. package/dist/lint/types.js.map +0 -1
  125. package/dist/lint/utils.d.ts +0 -55
  126. package/dist/lint/utils.d.ts.map +0 -1
  127. package/dist/lint/utils.js +0 -264
  128. package/dist/lint/utils.js.map +0 -1
  129. package/dist/parsers/gsapInline.d.ts +0 -47
  130. package/dist/parsers/gsapInline.d.ts.map +0 -1
  131. package/dist/parsers/gsapInline.js +0 -513
  132. package/dist/parsers/gsapInline.js.map +0 -1
  133. package/dist/parsers/gsapParser.d.ts +0 -158
  134. package/dist/parsers/gsapParser.d.ts.map +0 -1
  135. package/dist/parsers/gsapParser.js +0 -2634
  136. package/dist/parsers/gsapParser.js.map +0 -1
  137. package/dist/parsers/gsapParser.test-helpers.d.ts +0 -49
  138. package/dist/parsers/gsapParser.test-helpers.d.ts.map +0 -1
  139. package/dist/parsers/gsapParser.test-helpers.js +0 -97
  140. package/dist/parsers/gsapParser.test-helpers.js.map +0 -1
  141. package/dist/parsers/gsapSerialize.d.ts +0 -191
  142. package/dist/parsers/gsapSerialize.d.ts.map +0 -1
  143. package/dist/parsers/gsapSerialize.js +0 -410
  144. package/dist/parsers/gsapSerialize.js.map +0 -1
  145. package/dist/parsers/gsapUnroll.d.ts +0 -7
  146. package/dist/parsers/gsapUnroll.d.ts.map +0 -1
  147. package/dist/parsers/gsapUnroll.js +0 -137
  148. package/dist/parsers/gsapUnroll.js.map +0 -1
  149. package/dist/parsers/htmlParser.d.ts +0 -27
  150. package/dist/parsers/htmlParser.d.ts.map +0 -1
  151. package/dist/parsers/htmlParser.js +0 -731
  152. package/dist/parsers/htmlParser.js.map +0 -1
  153. package/dist/studio-api/createStudioApi.d.ts +0 -10
  154. package/dist/studio-api/createStudioApi.d.ts.map +0 -1
  155. package/dist/studio-api/createStudioApi.js +0 -32
  156. package/dist/studio-api/createStudioApi.js.map +0 -1
  157. package/dist/studio-api/helpers/backupJournal.d.ts +0 -9
  158. package/dist/studio-api/helpers/backupJournal.d.ts.map +0 -1
  159. package/dist/studio-api/helpers/backupJournal.js +0 -81
  160. package/dist/studio-api/helpers/backupJournal.js.map +0 -1
  161. package/dist/studio-api/helpers/hfIdPersist.d.ts +0 -11
  162. package/dist/studio-api/helpers/hfIdPersist.d.ts.map +0 -1
  163. package/dist/studio-api/helpers/hfIdPersist.js +0 -39
  164. package/dist/studio-api/helpers/hfIdPersist.js.map +0 -1
  165. package/dist/studio-api/helpers/mediaValidation.d.ts +0 -20
  166. package/dist/studio-api/helpers/mediaValidation.d.ts.map +0 -1
  167. package/dist/studio-api/helpers/mediaValidation.js +0 -56
  168. package/dist/studio-api/helpers/mediaValidation.js.map +0 -1
  169. package/dist/studio-api/helpers/mime.d.ts +0 -4
  170. package/dist/studio-api/helpers/mime.d.ts.map +0 -1
  171. package/dist/studio-api/helpers/mime.js +0 -39
  172. package/dist/studio-api/helpers/mime.js.map +0 -1
  173. package/dist/studio-api/helpers/previewAdapter.d.ts +0 -43
  174. package/dist/studio-api/helpers/previewAdapter.d.ts.map +0 -1
  175. package/dist/studio-api/helpers/previewAdapter.js +0 -118
  176. package/dist/studio-api/helpers/previewAdapter.js.map +0 -1
  177. package/dist/studio-api/helpers/projectSignature.d.ts +0 -5
  178. package/dist/studio-api/helpers/projectSignature.d.ts.map +0 -1
  179. package/dist/studio-api/helpers/projectSignature.js +0 -154
  180. package/dist/studio-api/helpers/projectSignature.js.map +0 -1
  181. package/dist/studio-api/helpers/safePath.d.ts +0 -12
  182. package/dist/studio-api/helpers/safePath.d.ts.map +0 -1
  183. package/dist/studio-api/helpers/safePath.js +0 -38
  184. package/dist/studio-api/helpers/safePath.js.map +0 -1
  185. package/dist/studio-api/helpers/sourceMutation.d.ts +0 -28
  186. package/dist/studio-api/helpers/sourceMutation.d.ts.map +0 -1
  187. package/dist/studio-api/helpers/sourceMutation.js +0 -339
  188. package/dist/studio-api/helpers/sourceMutation.js.map +0 -1
  189. package/dist/studio-api/helpers/subComposition.d.ts +0 -20
  190. package/dist/studio-api/helpers/subComposition.d.ts.map +0 -1
  191. package/dist/studio-api/helpers/subComposition.js +0 -289
  192. package/dist/studio-api/helpers/subComposition.js.map +0 -1
  193. package/dist/studio-api/helpers/waveform.d.ts +0 -4
  194. package/dist/studio-api/helpers/waveform.d.ts.map +0 -1
  195. package/dist/studio-api/helpers/waveform.js +0 -80
  196. package/dist/studio-api/helpers/waveform.js.map +0 -1
  197. package/dist/studio-api/routes/files.d.ts +0 -4
  198. package/dist/studio-api/routes/files.d.ts.map +0 -1
  199. package/dist/studio-api/routes/files.js +0 -1200
  200. package/dist/studio-api/routes/files.js.map +0 -1
  201. package/dist/studio-api/routes/fonts.d.ts +0 -3
  202. package/dist/studio-api/routes/fonts.d.ts.map +0 -1
  203. package/dist/studio-api/routes/fonts.js +0 -157
  204. package/dist/studio-api/routes/fonts.js.map +0 -1
  205. package/dist/studio-api/routes/lint.d.ts +0 -4
  206. package/dist/studio-api/routes/lint.d.ts.map +0 -1
  207. package/dist/studio-api/routes/lint.js +0 -29
  208. package/dist/studio-api/routes/lint.js.map +0 -1
  209. package/dist/studio-api/routes/preview.d.ts +0 -4
  210. package/dist/studio-api/routes/preview.d.ts.map +0 -1
  211. package/dist/studio-api/routes/preview.js +0 -331
  212. package/dist/studio-api/routes/preview.js.map +0 -1
  213. package/dist/studio-api/routes/projects.d.ts +0 -4
  214. package/dist/studio-api/routes/projects.d.ts.map +0 -1
  215. package/dist/studio-api/routes/projects.js +0 -45
  216. package/dist/studio-api/routes/projects.js.map +0 -1
  217. package/dist/studio-api/routes/registry.d.ts +0 -4
  218. package/dist/studio-api/routes/registry.d.ts.map +0 -1
  219. package/dist/studio-api/routes/registry.js +0 -31
  220. package/dist/studio-api/routes/registry.js.map +0 -1
  221. package/dist/studio-api/routes/render.d.ts +0 -4
  222. package/dist/studio-api/routes/render.d.ts.map +0 -1
  223. package/dist/studio-api/routes/render.js +0 -269
  224. package/dist/studio-api/routes/render.js.map +0 -1
  225. package/dist/studio-api/routes/storyboard.d.ts +0 -4
  226. package/dist/studio-api/routes/storyboard.d.ts.map +0 -1
  227. package/dist/studio-api/routes/storyboard.js +0 -65
  228. package/dist/studio-api/routes/storyboard.js.map +0 -1
  229. package/dist/studio-api/routes/thumbnail.d.ts +0 -4
  230. package/dist/studio-api/routes/thumbnail.d.ts.map +0 -1
  231. package/dist/studio-api/routes/thumbnail.js +0 -107
  232. package/dist/studio-api/routes/thumbnail.js.map +0 -1
  233. package/dist/studio-api/routes/waveform.d.ts +0 -4
  234. package/dist/studio-api/routes/waveform.d.ts.map +0 -1
  235. package/dist/studio-api/routes/waveform.js +0 -41
  236. package/dist/studio-api/routes/waveform.js.map +0 -1
  237. package/dist/studio-api/types.d.ts +0 -120
  238. package/dist/studio-api/types.d.ts.map +0 -1
  239. package/dist/studio-api/types.js +0 -2
  240. package/dist/studio-api/types.js.map +0 -1
@@ -1,74 +0,0 @@
1
- import { readAttr } from "../utils.js";
2
- import { parseSlideshowManifest, resolveSlideshow } from "../../slideshow/parseSlideshow.js";
3
- import { isSceneLikeCompositionId } from "../../slideshow/sceneId.js";
4
- function parseTiming(raw) {
5
- const startStr = readAttr(raw, "data-start");
6
- if (startStr === null)
7
- return null;
8
- const start = Number(startStr);
9
- if (!Number.isFinite(start))
10
- return null;
11
- const durationStr = readAttr(raw, "data-duration");
12
- if (durationStr !== null) {
13
- const duration = Number(durationStr);
14
- if (Number.isFinite(duration))
15
- return { start, duration };
16
- }
17
- const endStr = readAttr(raw, "data-end") ?? readAttr(raw, "data-hf-authored-end");
18
- if (endStr !== null) {
19
- const end = Number(endStr);
20
- if (Number.isFinite(end) && end > start)
21
- return { start, duration: end - start };
22
- }
23
- return null;
24
- }
25
- function collectCompositionIdScenes(ctx, seen, out) {
26
- for (const tag of ctx.tags) {
27
- const compositionId = readAttr(tag.raw, "data-composition-id");
28
- if (!compositionId || !isSceneLikeCompositionId(compositionId) || seen.has(compositionId))
29
- continue;
30
- const timing = parseTiming(tag.raw);
31
- if (!timing || timing.duration <= 0)
32
- continue;
33
- seen.add(compositionId);
34
- out.push({ id: compositionId, ...timing });
35
- }
36
- }
37
- function extractScenesFromClips(ctx) {
38
- const seen = new Set();
39
- const scenes = [];
40
- collectCompositionIdScenes(ctx, seen, scenes);
41
- return scenes;
42
- }
43
- export const slideshowRules = [
44
- (ctx) => {
45
- const findings = [];
46
- let manifest;
47
- try {
48
- manifest = parseSlideshowManifest(ctx.source);
49
- }
50
- catch (e) {
51
- findings.push({
52
- code: "slideshow_invalid",
53
- severity: "error",
54
- message: `Slideshow island contains invalid JSON or structure: ${e instanceof Error ? e.message : String(e)}`,
55
- fixHint: 'Ensure the <script type="application/hyperframes-slideshow+json"> block contains valid JSON matching the SlideshowManifest schema.',
56
- });
57
- return findings;
58
- }
59
- if (!manifest)
60
- return findings;
61
- const scenes = extractScenesFromClips(ctx);
62
- const { errors } = resolveSlideshow(manifest, scenes);
63
- for (const error of errors) {
64
- findings.push({
65
- code: "slideshow_unresolved_ref",
66
- severity: "error",
67
- message: `Slideshow manifest error: ${error}`,
68
- fixHint: "Ensure every sceneId in the slideshow island matches the data-composition-id of a scene element in the composition, or provide explicit startTime/endTime.",
69
- });
70
- }
71
- return findings;
72
- },
73
- ];
74
- //# sourceMappingURL=slideshow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"slideshow.js","sourceRoot":"","sources":["../../../src/lint/rules/slideshow.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { LintContext, HyperframeLintFinding } from "../context";
2
- export declare const textureRules: Array<(ctx: LintContext) => HyperframeLintFinding[]>;
3
- //# sourceMappingURL=textures.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"textures.d.ts","sourceRoot":"","sources":["../../../src/lint/rules/textures.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAW,MAAM,YAAY,CAAC;AAkI9E,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,qBAAqB,EAAE,CA8F7E,CAAC"}
@@ -1,192 +0,0 @@
1
- import postcss from "postcss";
2
- import { readAttr, truncateSnippet } from "../utils.js";
3
- const TEXTURE_BASE_CLASS = "hf-texture-text";
4
- const TEXTURE_CLASS_PREFIX = "hf-texture-";
5
- function classNames(tag) {
6
- return (readAttr(tag.raw, "class") ?? "").split(/\s+/).filter(Boolean);
7
- }
8
- function isTextureMaterialClass(className) {
9
- return className.startsWith(TEXTURE_CLASS_PREFIX) && className !== TEXTURE_BASE_CLASS;
10
- }
11
- function hasInlineMaskImage(tag) {
12
- const style = readAttr(tag.raw, "style") ?? "";
13
- return /\b(?:-webkit-)?mask-image\s*:/i.test(style);
14
- }
15
- function hasInlineDropShadow(tag) {
16
- const style = readAttr(tag.raw, "style") ?? "";
17
- return /\bfilter\s*:\s*[^;]*\bdrop-shadow\s*\(/i.test(style);
18
- }
19
- function classNamesInSelector(selector) {
20
- const classes = new Set();
21
- const pattern = /\.([A-Za-z_][\w-]*)/g;
22
- let match;
23
- while ((match = pattern.exec(selector)) !== null) {
24
- const className = match[1];
25
- if (!className)
26
- continue;
27
- classes.add(className);
28
- }
29
- return [...classes];
30
- }
31
- function textureClassesInSelector(selector) {
32
- return classNamesInSelector(selector).filter(isTextureMaterialClass);
33
- }
34
- function simpleSelectorMatchesTag(selector, tag, tagClasses) {
35
- const trimmed = selector.trim();
36
- const simpleSelectorPattern = /^(?:[A-Za-z][\w-]*)?(?:\.[A-Za-z_][\w-]*)+$/;
37
- if (!simpleSelectorPattern.test(trimmed))
38
- return false;
39
- const typeMatch = /^([A-Za-z][\w-]*)/.exec(trimmed);
40
- if (typeMatch && typeMatch[1].toLowerCase() !== tag.name)
41
- return false;
42
- const selectorClasses = classNamesInSelector(trimmed);
43
- return (selectorClasses.length > 0 &&
44
- selectorClasses.every((className) => tagClasses.includes(className)));
45
- }
46
- function collectTextureCss(styles) {
47
- const definedTextureClasses = new Set();
48
- const dropShadowRules = [];
49
- const roots = [];
50
- for (const style of styles) {
51
- let root;
52
- try {
53
- root = postcss.parse(style.content);
54
- }
55
- catch {
56
- continue;
57
- }
58
- roots.push(root);
59
- // fallow-ignore-next-line complexity
60
- root.walkRules((rule) => {
61
- const selectors = rule.selectors ?? [];
62
- let hasMaskImage = false;
63
- for (const node of rule.nodes ?? []) {
64
- if (node.type !== "decl")
65
- continue;
66
- const prop = node.prop.toLowerCase();
67
- if (prop === "mask-image" || prop === "-webkit-mask-image")
68
- hasMaskImage = true;
69
- }
70
- if (hasMaskImage) {
71
- for (const selector of selectors) {
72
- for (const className of textureClassesInSelector(selector)) {
73
- definedTextureClasses.add(className);
74
- }
75
- }
76
- }
77
- });
78
- }
79
- for (const root of roots) {
80
- // fallow-ignore-next-line complexity
81
- root.walkRules((rule) => {
82
- const selectors = rule.selectors ?? [];
83
- let hasDropShadow = false;
84
- for (const node of rule.nodes ?? []) {
85
- if (node.type !== "decl")
86
- continue;
87
- if (node.prop.toLowerCase() === "filter" && /\bdrop-shadow\s*\(/i.test(node.value)) {
88
- hasDropShadow = true;
89
- }
90
- }
91
- if (hasDropShadow) {
92
- for (const selector of selectors) {
93
- const targetsBaseClass = /\.hf-texture-text\b/.test(selector);
94
- const targetsDefinedTextureClass = textureClassesInSelector(selector).some((className) => definedTextureClasses.has(className));
95
- dropShadowRules.push({
96
- selector,
97
- directlyTargetsTexture: targetsBaseClass || targetsDefinedTextureClass,
98
- });
99
- }
100
- }
101
- });
102
- }
103
- return { definedTextureClasses, dropShadowRules };
104
- }
105
- // fallow-ignore-next-line complexity
106
- export const textureRules = [
107
- ({ tags, styles }) => {
108
- const findings = [];
109
- const { definedTextureClasses, dropShadowRules } = collectTextureCss(styles);
110
- for (const { selector, directlyTargetsTexture } of dropShadowRules) {
111
- if (!directlyTargetsTexture)
112
- continue;
113
- findings.push({
114
- code: "texture_drop_shadow_on_text",
115
- severity: "warning",
116
- message: "Drop shadow is applied directly to textured text.",
117
- selector,
118
- fixHint: "Wrap the textured text and apply `filter: drop-shadow(...)` to the wrapper, not the `hf-texture-text` element.",
119
- });
120
- }
121
- for (const tag of tags) {
122
- if (tag.name === "style" || tag.name === "script")
123
- continue;
124
- const classes = classNames(tag);
125
- if (classes.length === 0)
126
- continue;
127
- const hasBaseClass = classes.includes(TEXTURE_BASE_CLASS);
128
- const textureClasses = classes.filter(isTextureMaterialClass);
129
- if (textureClasses.length > 0 && !hasBaseClass) {
130
- findings.push({
131
- code: "texture_class_missing_base",
132
- severity: "warning",
133
- message: `Texture material class \`${textureClasses[0]}\` is used without \`${TEXTURE_BASE_CLASS}\`.`,
134
- elementId: readAttr(tag.raw, "id") || undefined,
135
- fixHint: `Add \`${TEXTURE_BASE_CLASS}\` alongside the material class, for example \`class="${TEXTURE_BASE_CLASS} ${textureClasses[0]}"\`.`,
136
- snippet: truncateSnippet(tag.raw),
137
- });
138
- }
139
- if (hasBaseClass && textureClasses.length === 0 && !hasInlineMaskImage(tag)) {
140
- findings.push({
141
- code: "texture_text_missing_mask",
142
- severity: "warning",
143
- message: `\`${TEXTURE_BASE_CLASS}\` is used without a texture material class or custom mask image.`,
144
- elementId: readAttr(tag.raw, "id") || undefined,
145
- fixHint: "Add a material class such as `hf-texture-lava`, or set `mask-image` and `-webkit-mask-image` on the element.",
146
- snippet: truncateSnippet(tag.raw),
147
- });
148
- }
149
- for (const textureClass of textureClasses) {
150
- if (definedTextureClasses.has(textureClass))
151
- continue;
152
- findings.push({
153
- code: "texture_class_unknown",
154
- severity: "error",
155
- message: `Texture material class \`${textureClass}\` is not defined by local CSS.`,
156
- elementId: readAttr(tag.raw, "id") || undefined,
157
- fixHint: "Paste the Texture Mask Text component `<style>...</style>` block into the composition, or fix the texture class typo.",
158
- snippet: truncateSnippet(tag.raw),
159
- });
160
- }
161
- if (hasBaseClass) {
162
- for (const rule of dropShadowRules) {
163
- if (rule.directlyTargetsTexture)
164
- continue;
165
- if (!simpleSelectorMatchesTag(rule.selector, tag, classes))
166
- continue;
167
- findings.push({
168
- code: "texture_drop_shadow_on_text",
169
- severity: "warning",
170
- message: "Drop shadow is applied directly to textured text.",
171
- selector: rule.selector,
172
- elementId: readAttr(tag.raw, "id") || undefined,
173
- fixHint: "Wrap the textured text and apply `filter: drop-shadow(...)` to the wrapper, not the `hf-texture-text` element.",
174
- snippet: truncateSnippet(tag.raw),
175
- });
176
- }
177
- }
178
- if (hasBaseClass && hasInlineDropShadow(tag)) {
179
- findings.push({
180
- code: "texture_drop_shadow_on_text",
181
- severity: "warning",
182
- message: "Drop shadow is applied directly to textured text.",
183
- elementId: readAttr(tag.raw, "id") || undefined,
184
- fixHint: "Wrap the textured text and apply `filter: drop-shadow(...)` to the wrapper, not the `hf-texture-text` element.",
185
- snippet: truncateSnippet(tag.raw),
186
- });
187
- }
188
- }
189
- return findings;
190
- },
191
- ];
192
- //# sourceMappingURL=textures.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"textures.js","sourceRoot":"","sources":["../../../src/lint/rules/textures.ts"],"names":[],"mappings":"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"}
@@ -1,36 +0,0 @@
1
- export type HyperframeLintSeverity = "error" | "warning" | "info";
2
- export type HyperframeLintFinding = {
3
- code: string;
4
- severity: HyperframeLintSeverity;
5
- message: string;
6
- file?: string;
7
- selector?: string;
8
- elementId?: string;
9
- fixHint?: string;
10
- snippet?: string;
11
- };
12
- export type HyperframeLintResult = {
13
- ok: boolean;
14
- errorCount: number;
15
- warningCount: number;
16
- infoCount: number;
17
- findings: HyperframeLintFinding[];
18
- };
19
- export type HyperframeLinterOptions = {
20
- filePath?: string;
21
- isSubComposition?: boolean;
22
- externalStyles?: Array<{
23
- href: string;
24
- content: string;
25
- }>;
26
- /**
27
- * Set to `true` when linting compositions destined for distributed / Lambda
28
- * rendering, where system-font capture (`allowSystemFontCapture`) is
29
- * disabled. When `true`, the `system_font_will_alias` rule is elevated from
30
- * `"info"` to `"warning"` because the alias substitution will NOT happen at
31
- * render time — the font will silently fall back to whatever the OS provides.
32
- */
33
- distributed?: boolean;
34
- };
35
- export type LintRule<TContext> = (ctx: TContext) => HyperframeLintFinding[] | Promise<HyperframeLintFinding[]>;
36
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lint/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAElE,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,sBAAsB,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,qBAAqB,EAAE,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAIF,MAAM,MAAM,QAAQ,CAAC,QAAQ,IAAI,CAC/B,GAAG,EAAE,QAAQ,KACV,qBAAqB,EAAE,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lint/types.ts"],"names":[],"mappings":""}
@@ -1,55 +0,0 @@
1
- export type OpenTag = {
2
- raw: string;
3
- name: string;
4
- attrs: string;
5
- index: number;
6
- };
7
- export type ExtractedBlock = {
8
- attrs: string;
9
- content: string;
10
- raw: string;
11
- index: number;
12
- };
13
- export declare const STYLE_BLOCK_PATTERN: RegExp;
14
- export declare const SCRIPT_BLOCK_PATTERN: RegExp;
15
- export declare const TIMELINE_REGISTRY_INIT_PATTERN: RegExp;
16
- export declare const TIMELINE_REGISTRY_ASSIGN_PATTERN: RegExp;
17
- export declare const WINDOW_TIMELINE_ASSIGN_PATTERN: RegExp;
18
- export declare const INVALID_SCRIPT_CLOSE_PATTERN: RegExp;
19
- export declare function extractOpenTags(source: string): OpenTag[];
20
- export declare function extractBlocks(source: string, pattern: RegExp): ExtractedBlock[];
21
- /**
22
- * Find the `<html>` open tag in the source. Distinct from `findRootTag`,
23
- * which returns the first element inside `<body>` — the latter is "the
24
- * composition's visible root", whereas `<html>` is where document-level
25
- * metadata like `data-composition-variables` lives.
26
- */
27
- export declare function findHtmlTag(source: string): OpenTag | null;
28
- export declare function findRootTag(source: string): OpenTag | null;
29
- export declare function readAttr(tagSource: string, attr: string): string | null;
30
- /**
31
- * Read an attribute that may legitimately contain the opposite quote
32
- * character. `readAttr` truncates `data-variable-values='{"title":"Hello"}'`
33
- * at the first internal `"` because its `[^"']+` class excludes both quote
34
- * types. This variant alternates: a double-quoted value never contains an
35
- * unescaped `"`, and a single-quoted value never contains an unescaped `'`,
36
- * so each branch can use a quote-specific class.
37
- *
38
- * Use for attributes whose values are JSON or otherwise carry the opposite
39
- * quote character. Existing single-token attributes (`id`, `class`, etc.)
40
- * stick with `readAttr` for consistency with the rest of the lint code.
41
- */
42
- export declare function readJsonAttr(tagSource: string, attr: string): string | null;
43
- export declare function collectCompositionIds(tags: OpenTag[]): Set<string>;
44
- export declare function extractCompositionIdsFromCss(css: string): string[];
45
- export declare function extractTimelineRegistryKeys(source: string): string[];
46
- export declare function getInlineScriptSyntaxError(source: string): string | null;
47
- export declare function stripJsComments(source: string): string;
48
- export declare function stripHtmlComments(source: string): string;
49
- export declare function extractScriptTextsAndSrcs(scripts: ExtractedBlock[]): {
50
- texts: string[];
51
- srcs: string[];
52
- };
53
- export declare function isMediaTag(tagName: string): boolean;
54
- export declare function truncateSnippet(value: string, maxLength?: number): string | undefined;
55
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lint/utils.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,OAAO,GAAG;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAGF,eAAO,MAAM,mBAAmB,QAA0C,CAAC;AAC3E,eAAO,MAAM,oBAAoB,QAA4C,CAAC;AAE9E,eAAO,MAAM,8BAA8B,QACuF,CAAC;AACnI,eAAO,MAAM,gCAAgC,QACgB,CAAC;AAC9D,eAAO,MAAM,8BAA8B,QAC4D,CAAC;AACxG,eAAO,MAAM,4BAA4B,QAA+C,CAAC;AAKzF,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAezD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,CAa/E;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAS1D;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CA4B1D;AAED,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKvE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM3E;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAOlE;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAWlE;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAYpE;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUxE;AAGD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA8DtD;AAuBD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAOxD;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG;IACpE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,CAIA;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,MAAM,GAAG,SAAS,CAKlF"}