@lampdotdev/lamp 0.0.0-stage → 0.35.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.
Files changed (464) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +357 -2
  3. package/Resources/Devices/roku.json +410 -0
  4. package/Resources/Devices/xbox-one.json +367 -0
  5. package/Resources/GameKit/NOTICE.md +63 -0
  6. package/Resources/GameKit/apple/LampPage.swift +1646 -0
  7. package/Resources/GameKit/apple/LampPlayer.swift +46 -0
  8. package/Resources/GameKit/apple/LampWebApp.swift +63 -0
  9. package/Resources/GameKit/apple/LampWebGame.swift +87 -0
  10. package/Resources/GameKit/apple/Native.swift +12 -0
  11. package/Resources/GameKit/build.sh +55 -0
  12. package/Resources/GameKit/lamp_game.h +116 -0
  13. package/Resources/GameKit/lamp_host.h +19 -0
  14. package/Resources/GameKit/lamp_kit.cpp +61 -0
  15. package/Resources/GameKit/lamp_sound.cpp +455 -0
  16. package/Resources/GameKit/lamp_xbox.cpp +374 -0
  17. package/Resources/GameKit/libraries/HandmadeMath.h +3940 -0
  18. package/Resources/GameKit/libraries/cgltf.h +7240 -0
  19. package/Resources/GameKit/libraries/dr_mp3.h +5430 -0
  20. package/Resources/GameKit/libraries/dr_wav.h +9209 -0
  21. package/Resources/GameKit/libraries/sokol_debugtext.h +4754 -0
  22. package/Resources/GameKit/libraries/sokol_gfx.h +29558 -0
  23. package/Resources/GameKit/libraries/sokol_gl.h +4538 -0
  24. package/Resources/GameKit/libraries/sokol_log.h +335 -0
  25. package/Resources/GameKit/libraries/sokol_shape.h +1531 -0
  26. package/Resources/GameKit/libraries/stb_image.h +7988 -0
  27. package/Resources/GameKit/libraries/stb_vorbis.c +5584 -0
  28. package/Resources/GameKit/scaffold/Game/game.cpp +142 -0
  29. package/Resources/GameKit/scaffold/Game/scene.glsl +49 -0
  30. package/Resources/GameKit/scaffold-web/Web/game.js +31 -0
  31. package/Resources/GameKit/scaffold-web/Web/index.html +13 -0
  32. package/Resources/GameKit/scaffold-web/Web/making.js +33 -0
  33. package/Resources/GameKit/scaffold-web/Web/world.js +33 -0
  34. package/Resources/GameKit/web/lamp-game.js +3036 -0
  35. package/Resources/GameKit/web/lamp-phaser.js +128 -0
  36. package/Resources/WebHost/App.exe +0 -0
  37. package/Resources/WebHost/Microsoft.Web.WebView2.Core.dll +0 -0
  38. package/Resources/WebHost/WebView2-LICENSE.txt +27 -0
  39. package/Resources/WebHost/lamp_controllers.h +1506 -0
  40. package/Resources/WebHost/lamp_web_host.cpp +1173 -0
  41. package/Resources/WebLibraries/earlier.txt +318 -0
  42. package/Resources/WebLibraries/phaser/LICENSE.md +20 -0
  43. package/Resources/WebLibraries/phaser/NOTICE.md +2 -0
  44. package/Resources/WebLibraries/phaser/phaser.esm.min.js +1 -0
  45. package/Resources/WebLibraries/qrcode/LICENSE +21 -0
  46. package/Resources/WebLibraries/qrcode/NOTICE.md +4 -0
  47. package/Resources/WebLibraries/qrcode/qrcode.js +2297 -0
  48. package/Resources/WebLibraries/rapier/LICENSE +201 -0
  49. package/Resources/WebLibraries/rapier/NOTICE.md +3 -0
  50. package/Resources/WebLibraries/rapier/rapier.js +2 -0
  51. package/Resources/WebLibraries/three/LICENSE +21 -0
  52. package/Resources/WebLibraries/three/NOTICE.md +4 -0
  53. package/Resources/WebLibraries/three/addons/animation/AnimationClipCreator.js +168 -0
  54. package/Resources/WebLibraries/three/addons/animation/CCDIKSolver.js +607 -0
  55. package/Resources/WebLibraries/three/addons/controls/ArcballControls.js +3543 -0
  56. package/Resources/WebLibraries/three/addons/controls/DragControls.js +452 -0
  57. package/Resources/WebLibraries/three/addons/controls/FirstPersonControls.js +512 -0
  58. package/Resources/WebLibraries/three/addons/controls/FlyControls.js +384 -0
  59. package/Resources/WebLibraries/three/addons/controls/MapControls.js +116 -0
  60. package/Resources/WebLibraries/three/addons/controls/OrbitControls.js +1985 -0
  61. package/Resources/WebLibraries/three/addons/controls/PointerLockControls.js +264 -0
  62. package/Resources/WebLibraries/three/addons/controls/TrackballControls.js +1106 -0
  63. package/Resources/WebLibraries/three/addons/controls/TransformControls.js +2003 -0
  64. package/Resources/WebLibraries/three/addons/curves/CurveExtras.js +694 -0
  65. package/Resources/WebLibraries/three/addons/curves/NURBSCurve.js +169 -0
  66. package/Resources/WebLibraries/three/addons/curves/NURBSSurface.js +98 -0
  67. package/Resources/WebLibraries/three/addons/curves/NURBSUtils.js +532 -0
  68. package/Resources/WebLibraries/three/addons/curves/NURBSVolume.js +82 -0
  69. package/Resources/WebLibraries/three/addons/effects/AnaglyphEffect.js +274 -0
  70. package/Resources/WebLibraries/three/addons/effects/AsciiEffect.js +323 -0
  71. package/Resources/WebLibraries/three/addons/effects/OutlineEffect.js +489 -0
  72. package/Resources/WebLibraries/three/addons/effects/ParallaxBarrierEffect.js +155 -0
  73. package/Resources/WebLibraries/three/addons/effects/StereoEffect.js +91 -0
  74. package/Resources/WebLibraries/three/addons/environments/ColorEnvironment.js +59 -0
  75. package/Resources/WebLibraries/three/addons/environments/DebugEnvironment.js +102 -0
  76. package/Resources/WebLibraries/three/addons/environments/RoomEnvironment.js +185 -0
  77. package/Resources/WebLibraries/three/addons/geometries/BoxLineGeometry.js +92 -0
  78. package/Resources/WebLibraries/three/addons/geometries/ConvexGeometry.js +72 -0
  79. package/Resources/WebLibraries/three/addons/geometries/DecalGeometry.js +420 -0
  80. package/Resources/WebLibraries/three/addons/geometries/LoftGeometry.js +355 -0
  81. package/Resources/WebLibraries/three/addons/geometries/ParametricFunctions.js +100 -0
  82. package/Resources/WebLibraries/three/addons/geometries/ParametricGeometry.js +172 -0
  83. package/Resources/WebLibraries/three/addons/geometries/RoundedBoxGeometry.js +216 -0
  84. package/Resources/WebLibraries/three/addons/geometries/TeapotGeometry.js +689 -0
  85. package/Resources/WebLibraries/three/addons/geometries/TextGeometry.js +102 -0
  86. package/Resources/WebLibraries/three/addons/helpers/AnimationPathHelper.js +302 -0
  87. package/Resources/WebLibraries/three/addons/helpers/LightProbeGridHelper.js +166 -0
  88. package/Resources/WebLibraries/three/addons/helpers/LightProbeGridHelperWebGL.js +221 -0
  89. package/Resources/WebLibraries/three/addons/helpers/LightProbeHelper.js +166 -0
  90. package/Resources/WebLibraries/three/addons/helpers/LightProbeHelperGPU.js +102 -0
  91. package/Resources/WebLibraries/three/addons/helpers/OctreeHelper.js +109 -0
  92. package/Resources/WebLibraries/three/addons/helpers/PositionalAudioHelper.js +169 -0
  93. package/Resources/WebLibraries/three/addons/helpers/RapierHelper.js +59 -0
  94. package/Resources/WebLibraries/three/addons/helpers/RectAreaLightHelper.js +118 -0
  95. package/Resources/WebLibraries/three/addons/helpers/TextureHelper.js +265 -0
  96. package/Resources/WebLibraries/three/addons/helpers/TextureHelperGPU.js +214 -0
  97. package/Resources/WebLibraries/three/addons/helpers/VertexNormalsHelper.js +155 -0
  98. package/Resources/WebLibraries/three/addons/helpers/VertexTangentsHelper.js +133 -0
  99. package/Resources/WebLibraries/three/addons/helpers/ViewHelper.js +529 -0
  100. package/Resources/WebLibraries/three/addons/interactive/HTMLMesh.js +617 -0
  101. package/Resources/WebLibraries/three/addons/interactive/InteractiveGroup.js +224 -0
  102. package/Resources/WebLibraries/three/addons/interactive/SelectionBox.js +324 -0
  103. package/Resources/WebLibraries/three/addons/interactive/SelectionHelper.js +150 -0
  104. package/Resources/WebLibraries/three/addons/libs/fflate.module.js +2699 -0
  105. package/Resources/WebLibraries/three/addons/libs/lil-gui.module.min.js +8 -0
  106. package/Resources/WebLibraries/three/addons/libs/meshopt_decoder.module.js +196 -0
  107. package/Resources/WebLibraries/three/addons/libs/potpack.module.js +125 -0
  108. package/Resources/WebLibraries/three/addons/libs/stats.module.js +167 -0
  109. package/Resources/WebLibraries/three/addons/libs/tween.module.js +876 -0
  110. package/Resources/WebLibraries/three/addons/lighting/ClusteredLighting.js +153 -0
  111. package/Resources/WebLibraries/three/addons/lighting/DynamicLighting.js +82 -0
  112. package/Resources/WebLibraries/three/addons/lighting/LightMapper.js +295 -0
  113. package/Resources/WebLibraries/three/addons/lighting/LightProbeGrid.js +923 -0
  114. package/Resources/WebLibraries/three/addons/lighting/LightProbeGridUtils.js +107 -0
  115. package/Resources/WebLibraries/three/addons/lighting/LightProbeGridWebGL.js +846 -0
  116. package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGIConeTracer.js +243 -0
  117. package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGIIrradiance.js +43 -0
  118. package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGINode.js +617 -0
  119. package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGISceneCollector.js +793 -0
  120. package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGIVolume.js +1440 -0
  121. package/Resources/WebLibraries/three/addons/lights/LightProbeGenerator.js +337 -0
  122. package/Resources/WebLibraries/three/addons/lights/RectAreaLightTexturesLib.js +127 -0
  123. package/Resources/WebLibraries/three/addons/lights/RectAreaLightUniformsLib.js +40 -0
  124. package/Resources/WebLibraries/three/addons/lights/SunLight.js +100 -0
  125. package/Resources/WebLibraries/three/addons/lights/SunLightNode.js +56 -0
  126. package/Resources/WebLibraries/three/addons/lights/SunLightShadow.js +319 -0
  127. package/Resources/WebLibraries/three/addons/lights/SunShadowNode.js +312 -0
  128. package/Resources/WebLibraries/three/addons/lines/Line2.js +56 -0
  129. package/Resources/WebLibraries/three/addons/lines/LineGeometry.js +157 -0
  130. package/Resources/WebLibraries/three/addons/lines/LineMaterial.js +742 -0
  131. package/Resources/WebLibraries/three/addons/lines/LineSegments2.js +434 -0
  132. package/Resources/WebLibraries/three/addons/lines/LineSegmentsGeometry.js +298 -0
  133. package/Resources/WebLibraries/three/addons/lines/Wireframe.js +108 -0
  134. package/Resources/WebLibraries/three/addons/lines/WireframeGeometry2.js +49 -0
  135. package/Resources/WebLibraries/three/addons/lines/webgpu/Line2.js +46 -0
  136. package/Resources/WebLibraries/three/addons/lines/webgpu/LineSegments2.js +419 -0
  137. package/Resources/WebLibraries/three/addons/lines/webgpu/Wireframe.js +86 -0
  138. package/Resources/WebLibraries/three/addons/loaders/EXRLoader.js +3411 -0
  139. package/Resources/WebLibraries/three/addons/loaders/FBXLoader.js +4660 -0
  140. package/Resources/WebLibraries/three/addons/loaders/FontLoader.js +262 -0
  141. package/Resources/WebLibraries/three/addons/loaders/GLTFLoader.js +5006 -0
  142. package/Resources/WebLibraries/three/addons/loaders/HDRLoader.js +463 -0
  143. package/Resources/WebLibraries/three/addons/loaders/MTLLoader.js +601 -0
  144. package/Resources/WebLibraries/three/addons/loaders/OBJLoader.js +961 -0
  145. package/Resources/WebLibraries/three/addons/loaders/PLYLoader.js +992 -0
  146. package/Resources/WebLibraries/three/addons/loaders/RGBELoader.js +18 -0
  147. package/Resources/WebLibraries/three/addons/loaders/STLLoader.js +423 -0
  148. package/Resources/WebLibraries/three/addons/loaders/SVGLoader.js +3297 -0
  149. package/Resources/WebLibraries/three/addons/loaders/TGALoader.js +539 -0
  150. package/Resources/WebLibraries/three/addons/loaders/UltraHDRLoader.js +757 -0
  151. package/Resources/WebLibraries/three/addons/math/Capsule.js +159 -0
  152. package/Resources/WebLibraries/three/addons/math/ColorConverter.js +62 -0
  153. package/Resources/WebLibraries/three/addons/math/ColorSpaces.js +147 -0
  154. package/Resources/WebLibraries/three/addons/math/ConvexHull.js +1695 -0
  155. package/Resources/WebLibraries/three/addons/math/ImprovedNoise.js +88 -0
  156. package/Resources/WebLibraries/three/addons/math/Lut.js +317 -0
  157. package/Resources/WebLibraries/three/addons/math/MeshSurfaceSampler.js +315 -0
  158. package/Resources/WebLibraries/three/addons/math/OBB.js +535 -0
  159. package/Resources/WebLibraries/three/addons/math/Octree.js +825 -0
  160. package/Resources/WebLibraries/three/addons/math/SimplexNoise.js +470 -0
  161. package/Resources/WebLibraries/three/addons/misc/ConvexObjectBreaker.js +539 -0
  162. package/Resources/WebLibraries/three/addons/misc/GPUComputationRenderer.js +508 -0
  163. package/Resources/WebLibraries/three/addons/misc/Gyroscope.js +78 -0
  164. package/Resources/WebLibraries/three/addons/misc/MorphAnimMesh.js +119 -0
  165. package/Resources/WebLibraries/three/addons/misc/MorphBlendMesh.js +425 -0
  166. package/Resources/WebLibraries/three/addons/misc/ProgressiveLightMap.js +370 -0
  167. package/Resources/WebLibraries/three/addons/misc/ProgressiveLightMapGPU.js +322 -0
  168. package/Resources/WebLibraries/three/addons/misc/RollerCoaster.js +661 -0
  169. package/Resources/WebLibraries/three/addons/misc/Sculptor.js +1679 -0
  170. package/Resources/WebLibraries/three/addons/misc/SculptorMesh.js +1504 -0
  171. package/Resources/WebLibraries/three/addons/misc/SculptorTools.js +1180 -0
  172. package/Resources/WebLibraries/three/addons/misc/SculptorUtils.js +345 -0
  173. package/Resources/WebLibraries/three/addons/misc/TileCreasedNormalsPlugin.js +270 -0
  174. package/Resources/WebLibraries/three/addons/misc/TubePainter.js +611 -0
  175. package/Resources/WebLibraries/three/addons/misc/Volume.js +520 -0
  176. package/Resources/WebLibraries/three/addons/misc/VolumeSlice.js +275 -0
  177. package/Resources/WebLibraries/three/addons/modifiers/CurveModifier.js +374 -0
  178. package/Resources/WebLibraries/three/addons/modifiers/CurveModifierGPU.js +256 -0
  179. package/Resources/WebLibraries/three/addons/modifiers/EdgeSplitModifier.js +299 -0
  180. package/Resources/WebLibraries/three/addons/modifiers/TessellateModifier.js +340 -0
  181. package/Resources/WebLibraries/three/addons/objects/GroundedSkybox.js +69 -0
  182. package/Resources/WebLibraries/three/addons/objects/Lensflare.js +489 -0
  183. package/Resources/WebLibraries/three/addons/objects/LensflareMesh.js +376 -0
  184. package/Resources/WebLibraries/three/addons/objects/MarchingCubes.js +1261 -0
  185. package/Resources/WebLibraries/three/addons/objects/Reflector.js +390 -0
  186. package/Resources/WebLibraries/three/addons/objects/ReflectorForSSRPass.js +393 -0
  187. package/Resources/WebLibraries/three/addons/objects/Refractor.js +389 -0
  188. package/Resources/WebLibraries/three/addons/objects/ShadowMesh.js +130 -0
  189. package/Resources/WebLibraries/three/addons/objects/Sky.js +342 -0
  190. package/Resources/WebLibraries/three/addons/objects/SkyMesh.js +403 -0
  191. package/Resources/WebLibraries/three/addons/objects/Water.js +374 -0
  192. package/Resources/WebLibraries/three/addons/objects/Water2.js +403 -0
  193. package/Resources/WebLibraries/three/addons/objects/Water2Mesh.js +199 -0
  194. package/Resources/WebLibraries/three/addons/objects/WaterMesh.js +194 -0
  195. package/Resources/WebLibraries/three/addons/postprocessing/AfterimagePass.js +187 -0
  196. package/Resources/WebLibraries/three/addons/postprocessing/BloomPass.js +274 -0
  197. package/Resources/WebLibraries/three/addons/postprocessing/BokehPass.js +218 -0
  198. package/Resources/WebLibraries/three/addons/postprocessing/ClearPass.js +97 -0
  199. package/Resources/WebLibraries/three/addons/postprocessing/CubeTexturePass.js +146 -0
  200. package/Resources/WebLibraries/three/addons/postprocessing/DotScreenPass.js +114 -0
  201. package/Resources/WebLibraries/three/addons/postprocessing/EffectComposer.js +365 -0
  202. package/Resources/WebLibraries/three/addons/postprocessing/FXAAPass.js +40 -0
  203. package/Resources/WebLibraries/three/addons/postprocessing/FilmPass.js +113 -0
  204. package/Resources/WebLibraries/three/addons/postprocessing/GTAOPass.js +735 -0
  205. package/Resources/WebLibraries/three/addons/postprocessing/GlitchPass.js +177 -0
  206. package/Resources/WebLibraries/three/addons/postprocessing/HalftonePass.js +134 -0
  207. package/Resources/WebLibraries/three/addons/postprocessing/LUTPass.js +138 -0
  208. package/Resources/WebLibraries/three/addons/postprocessing/MaskPass.js +195 -0
  209. package/Resources/WebLibraries/three/addons/postprocessing/OutlinePass.js +776 -0
  210. package/Resources/WebLibraries/three/addons/postprocessing/OutputPass.js +148 -0
  211. package/Resources/WebLibraries/three/addons/postprocessing/Pass.js +191 -0
  212. package/Resources/WebLibraries/three/addons/postprocessing/RenderPass.js +193 -0
  213. package/Resources/WebLibraries/three/addons/postprocessing/RenderPixelatedPass.js +314 -0
  214. package/Resources/WebLibraries/three/addons/postprocessing/RenderTransitionPass.js +267 -0
  215. package/Resources/WebLibraries/three/addons/postprocessing/SAOPass.js +407 -0
  216. package/Resources/WebLibraries/three/addons/postprocessing/SMAAPass.js +230 -0
  217. package/Resources/WebLibraries/three/addons/postprocessing/SSAARenderPass.js +313 -0
  218. package/Resources/WebLibraries/three/addons/postprocessing/SSAOPass.js +527 -0
  219. package/Resources/WebLibraries/three/addons/postprocessing/SSRPass.js +858 -0
  220. package/Resources/WebLibraries/three/addons/postprocessing/SavePass.js +132 -0
  221. package/Resources/WebLibraries/three/addons/postprocessing/ShaderPass.js +135 -0
  222. package/Resources/WebLibraries/three/addons/postprocessing/TAARenderPass.js +243 -0
  223. package/Resources/WebLibraries/three/addons/postprocessing/TexturePass.js +131 -0
  224. package/Resources/WebLibraries/three/addons/postprocessing/UnrealBloomPass.js +541 -0
  225. package/Resources/WebLibraries/three/addons/shaders/ACESFilmicToneMappingShader.js +96 -0
  226. package/Resources/WebLibraries/three/addons/shaders/AfterimageShader.js +63 -0
  227. package/Resources/WebLibraries/three/addons/shaders/BasicShader.js +36 -0
  228. package/Resources/WebLibraries/three/addons/shaders/BleachBypassShader.js +68 -0
  229. package/Resources/WebLibraries/three/addons/shaders/BlendShader.js +56 -0
  230. package/Resources/WebLibraries/three/addons/shaders/BokehShader.js +151 -0
  231. package/Resources/WebLibraries/three/addons/shaders/BokehShader2.js +404 -0
  232. package/Resources/WebLibraries/three/addons/shaders/BrightnessContrastShader.js +62 -0
  233. package/Resources/WebLibraries/three/addons/shaders/ColorCorrectionShader.js +59 -0
  234. package/Resources/WebLibraries/three/addons/shaders/ColorifyShader.js +57 -0
  235. package/Resources/WebLibraries/three/addons/shaders/ConvolutionShader.js +74 -0
  236. package/Resources/WebLibraries/three/addons/shaders/CopyShader.js +52 -0
  237. package/Resources/WebLibraries/three/addons/shaders/DOFMipMapShader.js +63 -0
  238. package/Resources/WebLibraries/three/addons/shaders/DepthLimitedBlurShader.js +183 -0
  239. package/Resources/WebLibraries/three/addons/shaders/DigitalGlitch.js +104 -0
  240. package/Resources/WebLibraries/three/addons/shaders/DotScreenShader.js +75 -0
  241. package/Resources/WebLibraries/three/addons/shaders/ExposureShader.js +51 -0
  242. package/Resources/WebLibraries/three/addons/shaders/FXAAShader.js +298 -0
  243. package/Resources/WebLibraries/three/addons/shaders/FilmShader.js +73 -0
  244. package/Resources/WebLibraries/three/addons/shaders/FocusShader.js +94 -0
  245. package/Resources/WebLibraries/three/addons/shaders/FreiChenShader.js +103 -0
  246. package/Resources/WebLibraries/three/addons/shaders/GTAOShader.js +437 -0
  247. package/Resources/WebLibraries/three/addons/shaders/GammaCorrectionShader.js +52 -0
  248. package/Resources/WebLibraries/three/addons/shaders/HalftoneShader.js +332 -0
  249. package/Resources/WebLibraries/three/addons/shaders/HorizontalBlurShader.js +68 -0
  250. package/Resources/WebLibraries/three/addons/shaders/HorizontalTiltShiftShader.js +70 -0
  251. package/Resources/WebLibraries/three/addons/shaders/HueSaturationShader.js +74 -0
  252. package/Resources/WebLibraries/three/addons/shaders/KaleidoShader.js +65 -0
  253. package/Resources/WebLibraries/three/addons/shaders/LuminosityHighPassShader.js +68 -0
  254. package/Resources/WebLibraries/three/addons/shaders/LuminosityShader.js +54 -0
  255. package/Resources/WebLibraries/three/addons/shaders/MirrorShader.js +62 -0
  256. package/Resources/WebLibraries/three/addons/shaders/NormalMapShader.js +60 -0
  257. package/Resources/WebLibraries/three/addons/shaders/OutputShader.js +103 -0
  258. package/Resources/WebLibraries/three/addons/shaders/PoissonDenoiseShader.js +230 -0
  259. package/Resources/WebLibraries/three/addons/shaders/RGBShiftShader.js +61 -0
  260. package/Resources/WebLibraries/three/addons/shaders/SAOShader.js +201 -0
  261. package/Resources/WebLibraries/three/addons/shaders/SMAAShader.js +489 -0
  262. package/Resources/WebLibraries/three/addons/shaders/SSAOShader.js +331 -0
  263. package/Resources/WebLibraries/three/addons/shaders/SSRShader.js +396 -0
  264. package/Resources/WebLibraries/three/addons/shaders/SepiaShader.js +57 -0
  265. package/Resources/WebLibraries/three/addons/shaders/SobelOperatorShader.js +98 -0
  266. package/Resources/WebLibraries/three/addons/shaders/SubsurfaceScatteringShader.js +95 -0
  267. package/Resources/WebLibraries/three/addons/shaders/TechnicolorShader.js +51 -0
  268. package/Resources/WebLibraries/three/addons/shaders/ToonShader.js +349 -0
  269. package/Resources/WebLibraries/three/addons/shaders/TriangleBlurShader.js +79 -0
  270. package/Resources/WebLibraries/three/addons/shaders/UnpackDepthRGBAShader.js +60 -0
  271. package/Resources/WebLibraries/three/addons/shaders/VelocityShader.js +137 -0
  272. package/Resources/WebLibraries/three/addons/shaders/VerticalBlurShader.js +66 -0
  273. package/Resources/WebLibraries/three/addons/shaders/VerticalTiltShiftShader.js +70 -0
  274. package/Resources/WebLibraries/three/addons/shaders/VignetteShader.js +56 -0
  275. package/Resources/WebLibraries/three/addons/shaders/VolumeShader.js +285 -0
  276. package/Resources/WebLibraries/three/addons/shaders/WaterRefractionShader.js +106 -0
  277. package/Resources/WebLibraries/three/addons/textures/FlakesTexture.js +54 -0
  278. package/Resources/WebLibraries/three/addons/tsl/WebGLNodesHandler.js +607 -0
  279. package/Resources/WebLibraries/three/addons/tsl/display/AfterImageNode.js +256 -0
  280. package/Resources/WebLibraries/three/addons/tsl/display/AnaglyphPassNode.js +550 -0
  281. package/Resources/WebLibraries/three/addons/tsl/display/BilateralBlurNode.js +377 -0
  282. package/Resources/WebLibraries/three/addons/tsl/display/BleachBypass.js +33 -0
  283. package/Resources/WebLibraries/three/addons/tsl/display/BloomNode.js +599 -0
  284. package/Resources/WebLibraries/three/addons/tsl/display/CRT.js +150 -0
  285. package/Resources/WebLibraries/three/addons/tsl/display/ChromaticAberrationNode.js +163 -0
  286. package/Resources/WebLibraries/three/addons/tsl/display/DenoiseNode.js +354 -0
  287. package/Resources/WebLibraries/three/addons/tsl/display/DepthOfFieldNode.js +572 -0
  288. package/Resources/WebLibraries/three/addons/tsl/display/DotScreenNode.js +104 -0
  289. package/Resources/WebLibraries/three/addons/tsl/display/FSR1Node.js +481 -0
  290. package/Resources/WebLibraries/three/addons/tsl/display/FXAANode.js +357 -0
  291. package/Resources/WebLibraries/three/addons/tsl/display/FilmNode.js +101 -0
  292. package/Resources/WebLibraries/three/addons/tsl/display/GTAONode.js +727 -0
  293. package/Resources/WebLibraries/three/addons/tsl/display/GaussianBlurNode.js +412 -0
  294. package/Resources/WebLibraries/three/addons/tsl/display/GodraysNode.js +604 -0
  295. package/Resources/WebLibraries/three/addons/tsl/display/ImportanceSampledEnvironment.js +564 -0
  296. package/Resources/WebLibraries/three/addons/tsl/display/LensflareNode.js +282 -0
  297. package/Resources/WebLibraries/three/addons/tsl/display/Lut3DNode.js +109 -0
  298. package/Resources/WebLibraries/three/addons/tsl/display/MotionBlur.js +33 -0
  299. package/Resources/WebLibraries/three/addons/tsl/display/OITPassNode.js +341 -0
  300. package/Resources/WebLibraries/three/addons/tsl/display/OutlineNode.js +916 -0
  301. package/Resources/WebLibraries/three/addons/tsl/display/ParallaxBarrierPassNode.js +90 -0
  302. package/Resources/WebLibraries/three/addons/tsl/display/PixelationPassNode.js +227 -0
  303. package/Resources/WebLibraries/three/addons/tsl/display/RGBShiftNode.js +96 -0
  304. package/Resources/WebLibraries/three/addons/tsl/display/RecurrentDenoiseNode.js +812 -0
  305. package/Resources/WebLibraries/three/addons/tsl/display/RetroPassNode.js +263 -0
  306. package/Resources/WebLibraries/three/addons/tsl/display/SMAANode.js +729 -0
  307. package/Resources/WebLibraries/three/addons/tsl/display/SSAAPassNode.js +344 -0
  308. package/Resources/WebLibraries/three/addons/tsl/display/SSAONode.js +422 -0
  309. package/Resources/WebLibraries/three/addons/tsl/display/SSGINode.js +698 -0
  310. package/Resources/WebLibraries/three/addons/tsl/display/SSRNode.js +1430 -0
  311. package/Resources/WebLibraries/three/addons/tsl/display/SSSNode.js +479 -0
  312. package/Resources/WebLibraries/three/addons/tsl/display/Sepia.js +24 -0
  313. package/Resources/WebLibraries/three/addons/tsl/display/Shape.js +29 -0
  314. package/Resources/WebLibraries/three/addons/tsl/display/SharpenNode.js +284 -0
  315. package/Resources/WebLibraries/three/addons/tsl/display/SobelOperatorNode.js +168 -0
  316. package/Resources/WebLibraries/three/addons/tsl/display/StereoCompositePassNode.js +190 -0
  317. package/Resources/WebLibraries/three/addons/tsl/display/StereoPassNode.js +117 -0
  318. package/Resources/WebLibraries/three/addons/tsl/display/TAAUNode.js +700 -0
  319. package/Resources/WebLibraries/three/addons/tsl/display/TRAANode.js +609 -0
  320. package/Resources/WebLibraries/three/addons/tsl/display/TemporalReprojectNode.js +1024 -0
  321. package/Resources/WebLibraries/three/addons/tsl/display/TransitionNode.js +141 -0
  322. package/Resources/WebLibraries/three/addons/tsl/display/boxBlur.js +65 -0
  323. package/Resources/WebLibraries/three/addons/tsl/display/depthAwareBlend.js +80 -0
  324. package/Resources/WebLibraries/three/addons/tsl/display/depthAwareBlur.js +63 -0
  325. package/Resources/WebLibraries/three/addons/tsl/display/hashBlur.js +55 -0
  326. package/Resources/WebLibraries/three/addons/tsl/display/lensDirt.js +30 -0
  327. package/Resources/WebLibraries/three/addons/tsl/display/radialBlur.js +68 -0
  328. package/Resources/WebLibraries/three/addons/tsl/lighting/ClusteredLightsNode.js +994 -0
  329. package/Resources/WebLibraries/three/addons/tsl/lighting/DynamicLightsNode.js +201 -0
  330. package/Resources/WebLibraries/three/addons/tsl/lighting/LightProbeGridNode.js +183 -0
  331. package/Resources/WebLibraries/three/addons/tsl/lighting/data/AmbientLightDataNode.js +67 -0
  332. package/Resources/WebLibraries/three/addons/tsl/lighting/data/DirectionalLightDataNode.js +117 -0
  333. package/Resources/WebLibraries/three/addons/tsl/lighting/data/HemisphereLightDataNode.js +105 -0
  334. package/Resources/WebLibraries/three/addons/tsl/lighting/data/PointLightDataNode.js +140 -0
  335. package/Resources/WebLibraries/three/addons/tsl/lighting/data/SpotLightDataNode.js +167 -0
  336. package/Resources/WebLibraries/three/addons/tsl/math/Bayer.js +84 -0
  337. package/Resources/WebLibraries/three/addons/tsl/math/curlNoise.js +107 -0
  338. package/Resources/WebLibraries/three/addons/tsl/math/voronoiNoise.js +112 -0
  339. package/Resources/WebLibraries/three/addons/tsl/shadows/TileShadowNode.js +542 -0
  340. package/Resources/WebLibraries/three/addons/tsl/shadows/TileShadowNodeHelper.js +212 -0
  341. package/Resources/WebLibraries/three/addons/tsl/utils/GroundedSkybox.js +62 -0
  342. package/Resources/WebLibraries/three/addons/tsl/utils/RNoise.js +51 -0
  343. package/Resources/WebLibraries/three/addons/tsl/utils/Raymarching.js +70 -0
  344. package/Resources/WebLibraries/three/addons/tsl/utils/SoftParticles.js +53 -0
  345. package/Resources/WebLibraries/three/addons/tsl/utils/SpecularHelpers.js +302 -0
  346. package/Resources/WebLibraries/three/addons/tsl/utils/TAAUtils.js +184 -0
  347. package/Resources/WebLibraries/three/addons/utils/BufferGeometryUtils.js +1523 -0
  348. package/Resources/WebLibraries/three/addons/utils/CameraUtils.js +82 -0
  349. package/Resources/WebLibraries/three/addons/utils/ColorUtils.js +76 -0
  350. package/Resources/WebLibraries/three/addons/utils/GaussianSplatUtils.js +229 -0
  351. package/Resources/WebLibraries/three/addons/utils/GeometryCompressionUtils.js +547 -0
  352. package/Resources/WebLibraries/three/addons/utils/GeometryUtils.js +226 -0
  353. package/Resources/WebLibraries/three/addons/utils/LDrawUtils.js +211 -0
  354. package/Resources/WebLibraries/three/addons/utils/SceneOptimizer.js +459 -0
  355. package/Resources/WebLibraries/three/addons/utils/SceneUtils.js +363 -0
  356. package/Resources/WebLibraries/three/addons/utils/ShadowMapViewer.js +244 -0
  357. package/Resources/WebLibraries/three/addons/utils/ShadowMapViewerGPU.js +233 -0
  358. package/Resources/WebLibraries/three/addons/utils/SkeletonUtils.js +496 -0
  359. package/Resources/WebLibraries/three/addons/utils/SortUtils.js +175 -0
  360. package/Resources/WebLibraries/three/addons/utils/UVsDebug.js +173 -0
  361. package/Resources/WebLibraries/three/addons/utils/WebGLTextureUtils.js +115 -0
  362. package/Resources/WebLibraries/three/addons/utils/WebGPUTextureUtils.js +81 -0
  363. package/Resources/WebLibraries/three/addons/utils/WorkerPool.js +167 -0
  364. package/Resources/WebLibraries/three/addons/utils/unwrapUVs.js +865 -0
  365. package/Resources/WebLibraries/three/three.core.js +61162 -0
  366. package/Resources/WebLibraries/three/three.module.js +19537 -0
  367. package/Resources/WebLibraries/three/three.tsl.js +41903 -0
  368. package/Resources/WebLibraries/three/three.webgpu.js +53714 -0
  369. package/Resources/skills/2d-game/SKILL.md +305 -0
  370. package/Resources/skills/3d-game/SKILL.md +274 -0
  371. package/Resources/skills/accounts/SKILL.md +41 -0
  372. package/Resources/skills/android-design/SKILL.md +159 -0
  373. package/Resources/skills/app-ai/SKILL.md +154 -0
  374. package/Resources/skills/app-intents/SKILL.md +31 -0
  375. package/Resources/skills/app-kinds/SKILL.md +122 -0
  376. package/Resources/skills/apple-watch/SKILL.md +43 -0
  377. package/Resources/skills/assets/SKILL.md +183 -0
  378. package/Resources/skills/building-blocks/SKILL.md +97 -0
  379. package/Resources/skills/device-control/SKILL.md +56 -0
  380. package/Resources/skills/device-integrations/SKILL.md +278 -0
  381. package/Resources/skills/finder-files/SKILL.md +19 -0
  382. package/Resources/skills/game/SKILL.md +414 -0
  383. package/Resources/skills/game-3d/SKILL.md +12 -0
  384. package/Resources/skills/game-art/SKILL.md +11 -0
  385. package/Resources/skills/game-feel/SKILL.md +13 -0
  386. package/Resources/skills/game-levels/SKILL.md +12 -0
  387. package/Resources/skills/game-live/SKILL.md +12 -0
  388. package/Resources/skills/game-physics/SKILL.md +13 -0
  389. package/Resources/skills/game-playtest/SKILL.md +26 -0
  390. package/Resources/skills/game-ui/SKILL.md +278 -0
  391. package/Resources/skills/github-projects/SKILL.md +59 -0
  392. package/Resources/skills/icloud-sync/SKILL.md +30 -0
  393. package/Resources/skills/iphone-hardware/SKILL.md +57 -0
  394. package/Resources/skills/iphone-widgets/SKILL.md +53 -0
  395. package/Resources/skills/lg-developer-mode/SKILL.md +152 -0
  396. package/Resources/skills/mac-widgets/SKILL.md +60 -0
  397. package/Resources/skills/maps/SKILL.md +8 -0
  398. package/Resources/skills/menu-bar/SKILL.md +36 -0
  399. package/Resources/skills/more-apps/SKILL.md +53 -0
  400. package/Resources/skills/phone-controllers/SKILL.md +79 -0
  401. package/Resources/skills/phone-pages/SKILL.md +173 -0
  402. package/Resources/skills/roku-developer-mode/SKILL.md +106 -0
  403. package/Resources/skills/scene-3d/SKILL.md +27 -0
  404. package/Resources/skills/scripting/SKILL.md +17 -0
  405. package/Resources/skills/share-extension/SKILL.md +22 -0
  406. package/Resources/skills/tv-design/SKILL.md +72 -0
  407. package/Resources/skills/web-app/SKILL.md +136 -0
  408. package/Resources/skills/web-game/SKILL.md +95 -0
  409. package/Resources/skills/web-or-native/SKILL.md +103 -0
  410. package/Resources/skills/wish-links/SKILL.md +156 -0
  411. package/THIRD_PARTY_NOTICES.md +170 -0
  412. package/cli/android.mjs +941 -0
  413. package/cli/browser.mjs +268 -0
  414. package/cli/calls.mjs +390 -0
  415. package/cli/dev.mjs +773 -0
  416. package/cli/devices.mjs +984 -0
  417. package/cli/lamp.mjs +1016 -0
  418. package/cli/lampapp.mjs +332 -0
  419. package/cli/lamps/android-host/LampPageGateway.kt +345 -0
  420. package/cli/lamps/android-host/app/build.gradle.kts +40 -0
  421. package/cli/lamps/android-host/build.gradle.kts +4 -0
  422. package/cli/lamps/android-host/game/AndroidManifest.xml +33 -0
  423. package/cli/lamps/android-host/game/MainActivity.kt +173 -0
  424. package/cli/lamps/android-host/gradle/libs.versions.toml +39 -0
  425. package/cli/lamps/android-host/gradle.properties +8 -0
  426. package/cli/lamps/android-host/page/AndroidManifest.xml +35 -0
  427. package/cli/lamps/android-host/page/MainActivity.kt +193 -0
  428. package/cli/lamps/android-host/settings.gradle.kts +30 -0
  429. package/cli/lamps/android-host/tools.json +43 -0
  430. package/cli/lamps/lamp-controllers.js +2 -0
  431. package/cli/lamps/lamp-for-games.js +6863 -0
  432. package/cli/lamps/lamp.js +7023 -0
  433. package/cli/lamps/mac-starter/.lamp/meta.json +1 -0
  434. package/cli/lamps/mac-starter/APP.md +12 -0
  435. package/cli/lamps/mac-starter/Package.swift +8 -0
  436. package/cli/lamps/mac-starter/Sources/App.swift +11 -0
  437. package/cli/lamps/mac-starter/Sources/ContentView.swift +17 -0
  438. package/cli/lamps/mac-starter/Sources/LampSupport.swift +18097 -0
  439. package/cli/lamps/mac-starter/build.sh +336 -0
  440. package/cli/lamps/mac-starter/gitignore +3 -0
  441. package/cli/lamps/mac-starter/lamp-starter.json +6 -0
  442. package/cli/lamps/web-starter/APP.md +8 -0
  443. package/cli/lamps/web-starter/app.js +1 -0
  444. package/cli/lamps/web-starter/index.html +17 -0
  445. package/cli/lamps/web-starter/lamp-starter.json +5 -0
  446. package/cli/lamps/web-starter/lamp.js +7023 -0
  447. package/cli/lamps/web-starter/style.css +25 -0
  448. package/cli/link.mjs +138 -0
  449. package/cli/mac.mjs +621 -0
  450. package/cli/mdns.mjs +205 -0
  451. package/cli/msix.mjs +413 -0
  452. package/cli/network.mjs +209 -0
  453. package/cli/outside.mjs +140 -0
  454. package/cli/page.js +165 -0
  455. package/cli/place.mjs +298 -0
  456. package/cli/png.mjs +184 -0
  457. package/cli/share.mjs +202 -0
  458. package/cli/skill/SKILL.md +255 -0
  459. package/cli/skills.mjs +71 -0
  460. package/cli/state.mjs +173 -0
  461. package/cli/update.mjs +57 -0
  462. package/package.json +20 -4
  463. package/site/lib/quota.js +59 -0
  464. package/site/lib/shared-wishes.js +996 -0
@@ -0,0 +1,336 @@
1
+ #!/bin/zsh
2
+ LAMP_MAC_USAGE=' <key>NSMicrophoneUsageDescription</key><string>Zqx App Name listens to your microphone.</string>
3
+ <key>NSSpeechRecognitionUsageDescription</key><string>Zqx App Name turns your speech into text.</string>
4
+ <key>NSCameraUsageDescription</key><string>Zqx App Name uses your camera.</string>
5
+ <key>NSPhotoLibraryUsageDescription</key><string>Zqx App Name uses your photos.</string>
6
+ <key>NSPhotoLibraryAddUsageDescription</key><string>Zqx App Name saves pictures to your photos.</string>
7
+ <key>NSCalendarsFullAccessUsageDescription</key><string>Zqx App Name reads and adds calendar events.</string>
8
+ <key>NSRemindersFullAccessUsageDescription</key><string>Zqx App Name reads and adds reminders.</string>
9
+ <key>NSContactsUsageDescription</key><string>Zqx App Name looks up people in your contacts.</string>
10
+ <key>NSBluetoothAlwaysUsageDescription</key><string>Zqx App Name connects to Bluetooth devices.</string>
11
+ <key>NSAppleEventsUsageDescription</key><string>Zqx App Name reads your email and drafts replies through Mail.</string>
12
+ <key>NSLocalNetworkUsageDescription</key><string>Zqx App Name looks for printers and other devices on your network.</string>
13
+ <key>NSLocationUsageDescription</key><string>Zqx App Name uses your location.</string>
14
+ <key>NSLocationWhenInUseUsageDescription</key><string>Zqx App Name uses your location.</string>
15
+ <key>NSAppleMusicUsageDescription</key><string>Zqx App Name plays music from your library.</string>'
16
+ LAMP_APP_NAME='Zqx App Name'
17
+ # Builds build/ZqxAppName.app. Run after every change.
18
+ set -euo pipefail
19
+ cd "$(dirname "$0")"
20
+ # dyld ignores DYLD_INSERT_LIBRARIES and the like for a binary with a __RESTRICT segment. The agent's shell
21
+ # can start the installed app, and Lamp answers its secrets calls only to the app itself (PeerProcess), so
22
+ # nothing may ride into it this way. Loading from inside the app (LiveReload's dlopen) is unaffected.
23
+ mkdir -p .build
24
+ : > .build/restrict
25
+ RESTRICT=(-Xlinker -sectcreate -Xlinker __RESTRICT -Xlinker __restrict -Xlinker "$PWD/.build/restrict")
26
+ FLAGS=(-c release -Xswiftc -g "${RESTRICT[@]}")
27
+ # A live build (Lamp's changing apps while they're open): debug, linked so a change can be put into the running
28
+ # app (LampLive), from a copy of the sources in .lamp/live with each view's body wrapped so its type stays the
29
+ # same from one change to the next. A file is copied only when it differs, so builds stay incremental.
30
+ if [[ "${LAMP_LIVE:-}" == 1 ]]; then
31
+ LIVE=.lamp/live
32
+ mkdir -p "$LIVE/Sources"
33
+ cat > "$LIVE/live.pl" <<'LAMPLIVE'
34
+ use strict; use warnings; use Digest::MD5 qw(md5_hex);
35
+ local $/;
36
+ my $modifier = qr/(?:func|var|let|subscript|override|class|final|open|public|internal|private|fileprivate|package|static|dynamic|required|convenience|nonisolated|lazy|weak|unowned|optional|indirect|init|deinit)\b/;
37
+ if (($ARGV[0] // '') eq 'scan') {
38
+ shift @ARGV;
39
+ # Lamp's own files (`-own=LampSupport.swift,…`) are scanned for names like the rest, but what they do with
40
+ # raw memory is their own business, never a reason to keep the app's structs from their spares.
41
+ my %own = map { $_ => 1 } split /,/, (($ARGV[0] // '') =~ /^-own=(.*)/ ? do { shift @ARGV; $1 } : '');
42
+ # Lamp's list of the structs the app reads as bytes (`LiveSlots.noteByteStructs`), when it has made one.
43
+ my $bytes = ($ARGV[0] // '') =~ /^-bytes=(.*)/ ? do { shift @ARGV; $1 } : '';
44
+ my (%names, %alias, %nospare, %equatable, %reflects, %bodies, @appTexts, $raw, $mirrors);
45
+ for my $file (@ARGV) {
46
+ open(my $in, '<', $file) or next; my $s = <$in>; close($in);
47
+ # A struct read as bytes anywhere (MemoryLayout, a buffer handed to Metal, an array's or a value's own bytes)
48
+ # must stay the size it's written with, and the one read may be declared in another file: so no struct gets
49
+ # a spare in such an app. Which of `withUnsafeBytes`'s receivers holds structs isn't in the text, so any counts.
50
+ push @appTexts, $s if !$own{(split m#/#, $file)[-1]};
51
+ $raw = 1 if !$own{(split m#/#, $file)[-1]} && $s =~ /MemoryLayout|withUnsafe|unsafeBitCast|makeBuffer|withContiguous(?:Mutable)?StorageIfAvailable|Unsafe(?:Mutable)?(?:Raw)?(?:Buffer)?Pointer|LowLevelMesh|MTLBuffer|\@frozen/;
52
+ $s =~ s#/\*[\s\S]*?\*/# #g; $s =~ s#//[^\n]*##g;
53
+ # Each struct's body, for which structs one read as bytes holds (below).
54
+ while ($s =~ /\bstruct\s+(\w+)[^{;]*\{/g) {
55
+ my ($name, $at, $depth) = ($1, pos($s), 1); my $i = $at;
56
+ while ($i < length($s) && $depth) { my $c = substr($s, $i++, 1); $depth++ if $c eq '{'; $depth-- if $c eq '}' }
57
+ $bodies{$name} .= substr($s, $at, $i - $at);
58
+ }
59
+ # A struct made an OptionSet or RawRepresentable in an extension: its memberwise initializer is the
60
+ # protocol's `init(rawValue:)`, which a spare's parameter would unfit. One made BitwiseCopyable can hold
61
+ # nothing a spare is.
62
+ while ($s =~ /\bextension\s+([\w.]+)\s*:[^{]*\b(?:OptionSet|RawRepresentable|BitwiseCopyable)\b/g) { $nospare{(split /\./, $1)[-1]} = 1 }
63
+ # A view made Equatable or Hashable in an extension: its state box isn't either, and the synthesized
64
+ # conformance would fail as it does for one declared so (`spares` reads only the declaration's header).
65
+ while ($s =~ /\bextension\s+([\w.]+)\s*:[^{]*\b(?:Equatable|Hashable)\b/g) { $equatable{(split /\./, $1)[-1]} = 1 }
66
+ # A struct with a mirror of its own keeps it (`spares` gives one to the rest): made CustomReflectable in an
67
+ # extension, or any `customMirror` the app's code writes, which a second would clash with.
68
+ while ($s =~ /\bextension\s+([\w.]+)\s*:[^{]*\bCustomReflectable\b/g) { $reflects{(split /\./, $1)[-1]} = 1 }
69
+ $mirrors = 1 if !$own{(split m#/#, $file)[-1]} && $s =~ /\bcustomMirror\b/;
70
+ # A class under a class of the same simple name (`B.Item: A.Item`): spare places are named by the simple
71
+ # name, so the subclass's would override the superclass's stored ones. Neither gets any.
72
+ while ($s =~ /\bclass\s+(?!$modifier)(\w+)(?:<[^>]*>)?\s*:\s*([\w.]+)/g) { my ($n, $up) = ($1, (split /\./, $2)[-1]); $nospare{$n} = 1 if $n eq $up }
73
+ while ($s =~ /\btypealias\s+(\w+)(?:<[^>]*>)?\s*=\s*([\w.]+)/g) { $alias{$1} = $2 }
74
+ while ($s =~ /\bclass\s+\w+(?:<[^>]*>)?\s*:\s*([\w.]+)/g) { $names{$1} = 1 }
75
+ while ($s =~ /<[^<>]*>/g) { my $g = $&; while ($g =~ /:\s*([\w.]+)/g) { $names{$1} = 1 } }
76
+ while ($s =~ /\bwhere\b(?!\s*:)([^{]*)/g) { my $w = $1; while ($w =~ /:\s*([\w.]+)/g) { $names{$1} = 1 } }
77
+ }
78
+ for my $name (keys %names) { my $n = $name; for (1 .. 4) { last unless exists $alias{(split /\./, $n)[-1]}; $n = $alias{(split /\./, $n)[-1]}; $names{$n} = 1 } }
79
+ # With Lamp's list for these very files, only the structs read as bytes, and those they hold, go without a spare;
80
+ # without it (none made, a stale one, or `*`), none get one in such an app.
81
+ my $byteList;
82
+ if ($raw && $bytes ne '' && open(my $list, '<', $bytes)) {
83
+ my @read = split /\n/, <$list>; close($list);
84
+ if (@read && $read[0] eq 'md5 ' . md5_hex(join("\n", sort map { md5_hex($_) } @appTexts)) && !grep { $_ eq '*' } @read) {
85
+ ($byteList, $raw) = (1, 0);
86
+ my (@todo, %seen) = @read[1 .. $#read];
87
+ while (defined(my $n = shift @todo)) {
88
+ next if $seen{$n}++;
89
+ $nospare{$n} = 1;
90
+ my $body = $bodies{$n} // next;
91
+ push @todo, grep { !$seen{$_} && $body =~ /\b\Q$_\E\b/ } keys %bodies;
92
+ }
93
+ }
94
+ }
95
+ # The names, then what the spares step is told: `-raw`, and `-nospare:Name` for each.
96
+ print join(' ', sort(keys %names), ($raw ? '-raw' : ()), ($byteList ? '-bytes' : ()), ($mirrors ? '-nomirror' : ()), (map { "-nospare:$_" } sort keys %nospare),
97
+ (map { "-equatable:$_" } sort keys %equatable), map { "-reflects:$_" } sort keys %reflects), "\n";
98
+ exit 0;
99
+ }
100
+ my ($count, $subclassed, $flags, @files) = @ARGV;
101
+ my %subclassed = map { (split /\./)[-1] => 1 } grep { !/^-/ } split ' ', $subclassed;
102
+ my $rawAll = $subclassed =~ /(?:^|\s)-raw(?:\s|$)/;
103
+ my $bytesKnown = $subclassed =~ /(?:^|\s)-bytes(?:\s|$)/;
104
+ my %nospare = map { substr($_, 9) => 1 } grep { /^-nospare:/ } split ' ', $subclassed;
105
+ my %equatable = map { substr($_, 11) => 1 } grep { /^-equatable:/ } split ' ', $subclassed;
106
+ my %reflects = map { substr($_, 10) => 1 } grep { /^-reflects:/ } split ' ', $subclassed;
107
+ my $noMirror = $subclassed =~ /(?:^|\s)-nomirror(?:\s|$)/;
108
+ # A struct given a spare is made CustomReflectable in its own header, so its description leaves the spare out
109
+ # (`LampSpare.mirror`): after its inheritance list, before a `where`, or as the list when it has none.
110
+ sub conform {
111
+ my ($whole, $name) = @_;
112
+ return undef unless $whole =~ /^([\s\S]*?\bstruct\s+\Q$name\E)(?<g><(?:[^<>]++|(?&g))*>)?([^{]*?)(\s*)\{\z/;
113
+ my ($head, $generics, $rest, $space) = ($1, $2 // '', $3, $4);
114
+ if ($rest =~ /^\s*:/) {
115
+ $rest =~ s/(\s)where\b/, CustomReflectable$1where/ or $rest =~ s/(\s*)\z/, CustomReflectable$1/;
116
+ } else {
117
+ $rest = ": CustomReflectable" . $rest;
118
+ }
119
+ return "$head$generics$rest$space\{";
120
+ }
121
+ my $wantSpares = $flags =~ /s/; my $wantFinal = $flags =~ /f/;
122
+ # The stretches of a file no rewrite may touch, worked out again after each rewrite moves them.
123
+ my @skip;
124
+ sub spans {
125
+ my $s = shift; my @found;
126
+ while ($s =~ /((#+)"""(?:\\\2[\s\S]|\\(?!\2)|[^\\])*?"""\2|"""(?:\\[\s\S]|[^\\])*?"""|(#+)"(?:\\\3[^\n]|\\(?!\3)|[^"\\\n]|"(?!\3))*?"\3|"(?:[^"\\\n]|\\.)*"|(?<blk>\/\*(?:(?&blk)|(?!\*\/)[\s\S])*+(?:\*\/|\z))|\/\/[^\n]*)/g) { push @found, [$-[0], $+[0]] }
127
+ return @found;
128
+ }
129
+ sub inside { my $p = shift; for my $span (@skip) { return 1 if $p >= $span->[0] && $p < $span->[1] } 0 }
130
+ sub spares {
131
+ my ($i, $whole, $header, $kind, $name, $raw) = @_;
132
+ # On a line of its own the places go under it, indented; after other text they go on the same line.
133
+ my $pad = $i =~ /^[ \t]*$/ ? "\n$i " : " ";
134
+ if ($kind eq 'class') {
135
+ return $whole if $nospare{$name} || $header =~ /\@Model\b|NSManagedObject|(?<!unchecked )\bSendable\b/;
136
+ return $whole . join('', map { "${pad}var __lampSpare_${name}_$_: LampSpare? = nil;" } 0 .. $count - 1);
137
+ }
138
+ return $whole if $header =~ /\@propertyWrapper|\@frozen|\b(?:App|Scene|Commands|DynamicProperty|AppIntent|\w*Intent|AppEntity|\w*Query|TimelineProvider|TimelineEntry|Widget\w*)\b/;
139
+ if ($header =~ /\bView\b/) {
140
+ return $whole if $equatable{$name} || $header =~ /\b(?:Equatable|Hashable)\b/;
141
+ # Its state's box, a place for new parameters, and its environment, which a new `@Environment(\.key)` reads.
142
+ # The place isn't private: a private stored property with a starting value makes the initializer Swift
143
+ # writes for the struct private on the Swift Apple ships now (6.4 leaves such a property out of it instead),
144
+ # so a view made in another file wouldn't build. As a struct's, the place is one more argument with a
145
+ # default, which a call never notices.
146
+ return "${whole}${pad}\@State private var __lampState_${name} = LampStateBox();${pad}var __lampSpare_${name} = LampSpare(nil);${pad}\@Environment(\\.self) private var __lampEnv_${name};";
147
+ }
148
+ return $whole if $raw || $nospare{$name} || $header =~ /\b(?:OptionSet|RawRepresentable|BitwiseCopyable)\b/;
149
+ my $mirrored = !$noMirror && !$reflects{$name} && $header !~ /\bCustomReflectable\b|~\s*(?:Copyable|Escapable)/ ? conform($whole, $name) : undef;
150
+ return "${whole}${pad}var __lampSpare_${name} = LampSpare(nil);" unless defined $mirrored;
151
+ return "${mirrored}${pad}var __lampSpare_${name} = LampSpare(nil);${pad}var customMirror: Mirror { LampSpare.mirror(of: self) };";
152
+ }
153
+ for my $file (@files) {
154
+ open(my $in, '<', $file) or die "$file: $!"; my $s = <$in>; close($in);
155
+ my $raw = $rawAll || !$bytesKnown && $s =~ /MemoryLayout|withUnsafe|unsafeBitCast|makeBuffer|withContiguous(?:Mutable)?StorageIfAvailable|Unsafe(?:Mutable)?(?:Raw)?(?:Buffer)?Pointer|LowLevelMesh|MTLBuffer|\@frozen/;
156
+ @skip = spans($s);
157
+ $s =~ s{var\s+body\s*:\s*some\s+(?:SwiftUI\.)?View\s*\{}~ inside($-[0]) ? $& : "var body: AnyView { _ = LampLive.generation; return AnyView(__lampBody) }\n \@ViewBuilder var __lampBody: some View {" ~ge;
158
+ @skip = spans($s);
159
+ # What else SwiftUI keeps until something it reads changes: a modifier's and a style's body, and a layout's
160
+ # placement. Each reads the generation too, so a change draws it again with the new code. Only a body that
161
+ # returns `some View` (a view builder, where a statement before the views changes nothing) and a placement,
162
+ # which returns nothing; never across another declaration (a protocol's requirement has no body, and the
163
+ # next `{` may be a property's `{ get }`). Not a representable's update: run again on every change, it would
164
+ # redo what it does each time (a web view reloading, a map going back to where it started).
165
+ my $sig = qr/(?:(?!\b(?:func|var|let|init|subscript|struct|class|enum|protocol|extension|actor|case)\b)[^{}])*/;
166
+ $s =~ s{\bfunc\s+(?:body\s*\(\s*content|makeBody\s*\(\s*configuration)$sig->\s*some\s+(?:SwiftUI\.)?View\s*\{|\bfunc\s+placeSubviews\s*\(\s*in$sig\)\s*\{}~ inside($-[0]) ? $& : "$&let _ = LampLive.touch(); " ~ge;
167
+ # And the body of content that isn't a view (a toolbar's, a chart's, a map's, a tab's): built by a builder that
168
+ # takes a statement first as a view builder does, and kept by SwiftUI the same way.
169
+ @skip = spans($s);
170
+ $s =~ s{\bvar\s+body\s*:\s*some\s+(?:SwiftUI\.|Charts\.|MapKit\.)?(?:ToolbarContent|CustomizableToolbarContent|ChartContent|MapContent|TabContent|AccessibilityRotorContent)\s*\{}~ inside($-[0]) ? $& : "$&let _ = LampLive.touch(); " ~ge;
171
+ @skip = spans($s);
172
+ # A layout's `sizeThatFits` too, which is asked again only when what it read changes. Its body runs inside a
173
+ # closure that reads it first (`LampLive.touched`), which returns what the body returns, written as one
174
+ # expression or with `return`; a statement before it would stop a one-expression body returning. The body's
175
+ # end is found brace by brace outside strings and comments, from the last such method back.
176
+ @skip = spans($s);
177
+ my @layouts;
178
+ while ($s =~ /\bfunc\s+sizeThatFits\s*\(\s*proposal$sig->\s*CGSize\s*\{/g) { push @layouts, pos($s) - 1 unless inside($-[0]) }
179
+ for my $open (reverse @layouts) {
180
+ my ($depth, $close) = (0, -1);
181
+ for (my $i = $open; $i < length($s); $i++) {
182
+ next if inside($i);
183
+ my $c = substr($s, $i, 1);
184
+ if ($c eq chr(123)) { $depth++ } elsif ($c eq chr(125)) { $depth--; if ($depth == 0) { $close = $i; last } }
185
+ }
186
+ next if $close < 0;
187
+ substr($s, $close, 0) = " " . chr(125) . " ";
188
+ substr($s, $open + 1, 0) = " LampLive.touched " . chr(123) . " ";
189
+ }
190
+ @skip = spans($s);
191
+ my $main;
192
+ $s =~ s{^([ \t]*(?:(?:\@\w+(?:\([^)]*\))?|public|internal|fileprivate|private|open|final)\s+)*)\@main((?:(?:\s|//[^\n]*|/\*[\s\S]*?\*/)+(?:\@\w+(?:\([^)]*\))?|public|internal|fileprivate|private|open|final))*(?:\s|//[^\n]*|/\*[\s\S]*?\*/)+(?:struct|class|enum|actor)\s+(\w+))}{ if (inside($-[0])) { $& } else { $main = $3; "$1$2" } }me;
193
+ $s .= "\n\@main enum __LampEntry { \@MainActor static func main() { LampLive.watch(); $main.main() } }\n" if defined $main;
194
+ if ($wantSpares) {
195
+ @skip = spans($s);
196
+ # At the start of a line, or after a brace or semicolon on one (a type declared inside another on one line).
197
+ $s =~ s#(^[ \t]*|[{;][ \t]*)(((?:\@[\w.]+(?:\([^)\n]*\))?\s+)*(?:(?:public|private|fileprivate|internal|open|final|nonisolated|indirect)\s+)*)(class|struct)\s+(?!$modifier)(\w+)([^{;]*)\{)#inside($-[0] + length($1)) ? $& : $1 . spares($1, $2, $3 . $6, $4, $5, $raw)#gme;
198
+ }
199
+ if ($wantFinal) {
200
+ @skip = spans($s);
201
+ $s =~ s{^([ \t]*)((?:\@[\w.]+(?:\([^)\n]*\))?\s+)*(?:(?:public|private|fileprivate|internal|nonisolated|indirect)\s+)*)(class)\s+(?!$modifier)(\w+)}{ (inside($-[3]) || $subclassed{$4}) ? $& : "$1$2final " . substr($&, length($1) + length($2)) }gme;
202
+ }
203
+ open(my $out, '>', $file) or die "$file: $!"; print $out $s; close($out);
204
+ }
205
+ LAMPLIVE
206
+ # The names something may subclass, so every other class can be final.
207
+ SUBCLASSED=$(perl "$LIVE/live.pl" scan -own=LampSupport.swift,LampScene.swift -bytes="$LIVE/byte-structs" Sources/**/*.swift(N) 2>/dev/null || true)
208
+ # The pass is kept for each file with what it was made from, and taken again only when any of that changed:
209
+ # over LampSupport.swift, which hardly ever does, it takes a second or more, and every change waited for it.
210
+ KEY="4|$(cksum < "$LIVE/live.pl")|$SUBCLASSED"
211
+ for f in Sources/**/*.swift(N); do
212
+ out="$LIVE/$f"
213
+ made="$LIVE/.made/$f"
214
+ mkdir -p "${out:h}" "${made:h}"
215
+ # Lamp's own files get the body wrap and the entry only; the app's get spare places and final classes too,
216
+ # unless either kept the app from building.
217
+ flags=""
218
+ case "${f:t}" in LampSupport.swift|LampScene.swift) ;; *) [[ -e "$LIVE/no-spares" ]] || flags="${flags}s"; [[ -e "$LIVE/no-final" ]] || flags="${flags}f" ;; esac
219
+ if [[ -f "$made.out" ]] && cmp -s "$f" "$made.in" && [[ "$(cat "$made.key" 2>/dev/null)" == "$KEY|$flags" ]]; then
220
+ cmp -s "$made.out" "$out" || cp "$made.out" "$out"
221
+ continue
222
+ fi
223
+ # The entry is void until it's whole again, and holds the very text the pass was made from: the agent may
224
+ # edit the file meanwhile, and a build ended halfway (a newer change's) must leave no entry that looks right.
225
+ rm -f "$made.key"
226
+ cp "$f" "$made.in"
227
+ cp "$made.in" "$out.new"
228
+ perl "$LIVE/live.pl" 4 "$SUBCLASSED" "$flags" "$out.new"
229
+ cp "$out.new" "$made.out"; print -r -- "$KEY|$flags" > "$made.key"
230
+ if cmp -s "$out.new" "$out"; then rm "$out.new"; else mv "$out.new" "$out"; fi
231
+ done
232
+ # Lamp's own file beside the spares (LiveSlots.addMemberwise) has no original to be kept by.
233
+ for f in "$LIVE"/Sources/**/*.swift(N); do [[ -f "${f#$LIVE/}" || "${f:t}" == LampMemberwise.swift ]] || rm "$f"; done
234
+ # What's built beside the app (a widget, a share extension) is built from the copy too, as it is.
235
+ for d in Widget Share; do
236
+ if [[ -d "$d" ]]; then mkdir -p "$LIVE/$d"; rsync -a --delete "$d/" "$LIVE/$d/"; else rm -rf "$LIVE/$d"; fi
237
+ done
238
+ # The widget's code the app shares, linked into Sources as it is there (WidgetShared), onto the copy.
239
+ if [[ -L Sources/WidgetShared ]]; then ln -sfn ../Widget/Shared "$LIVE/Sources/WidgetShared"; elif [[ -L "$LIVE/Sources/WidgetShared" ]]; then rm "$LIVE/Sources/WidgetShared"; fi
240
+ cmp -s Package.swift "$LIVE/Package.swift" || cp Package.swift "$LIVE/Package.swift"
241
+ # Lamp only wants the live copy, to put a change into the open app before building the whole of it.
242
+ [[ "${LAMP_LIVE_COPY:-}" == 1 ]] && exit 0
243
+ # What this build compiles, which is what the app runs once it's installed (LiveReload.markRunning): kept
244
+ # aside, and the record only once the build has worked, or a failed one would name code no app runs.
245
+ rsync -a --delete "$LIVE/Sources/" "$LIVE/compiling/"
246
+ FLAGS=(-c debug --package-path "$LIVE" --scratch-path "$LIVE/.build" -Xswiftc -DLAMP_LIVE -Xswiftc -enable-testing -Xlinker -interposable "${RESTRICT[@]}")
247
+ fi
248
+ # App Intents (Shortcuts, Siri, Spotlight, a widget's buttons): Xcode's tools write what the code declares into the app.
249
+ # What they did is kept in .build/appintents for this build alone: Lamp reads there whether they ran.
250
+ INTENTS=""
251
+ rm -rf .build/appintents
252
+ if grep -rqs --include='*.swift' -e 'import AppIntents' Sources Widget; then
253
+ if PROCESSOR="$(xcrun -f appintentsmetadataprocessor 2>/dev/null)"; then
254
+ INTENTS=1
255
+ mkdir -p .build
256
+ echo '["AnyResolverProviding","AppEntity","AppEnum","AppExtension","AppIntent","AppIntentsPackage","AppShortcutProviding","AppShortcutsProvider","AppUnionValue","AppUnionValueCasesProviding","DynamicOptionsProvider","EntityQuery","ExtensionPointDefining","IntentValueQuery","Resolver","TransientEntity","_AssistantIntentsProvider","_GenerativeFunctionExtractable","_IntentValueRepresentable"]' > .build/appintents-protocols.json
257
+ # The compiler's own option for the protocols' list, named as this compiler names it: Swift 6.2 (Xcode 26.0)
258
+ # knows only `-const-gather-protocols-file`, and only in the frontend.
259
+ GATHER=-const-gather-protocols-list
260
+ swiftc -frontend -help-hidden 2>/dev/null | grep -q -- "$GATHER" || GATHER=-const-gather-protocols-file
261
+ FLAGS+=(-Xswiftc -emit-const-values -Xswiftc -Xfrontend -Xswiftc "$GATHER"
262
+ -Xswiftc -Xfrontend -Xswiftc "$PWD/.build/appintents-protocols.json")
263
+ else
264
+ echo "warning: Xcode isn't installed, so Siri, Shortcuts and Spotlight won't see this app's App Intents." >&2
265
+ fi
266
+ fi
267
+ intents() { # a program, its bundle, the bundle's id, the folder of its code
268
+ [[ -n "$INTENTS" ]] || return 0
269
+ local target="$1" bundle="$PWD/$2" id="$3" code="$4"
270
+ local bindir="$(swift build "${FLAGS[@]}" --show-bin-path)"
271
+ local work="$PWD/.build/appintents/$target"
272
+ local toolchain="$(dirname "$(dirname "$(dirname "$PROCESSOR")")")"
273
+ rm -rf "$work"
274
+ mkdir -p "$work/ssu" "$bundle/Contents/Resources"
275
+ : > "$work/none.txt"
276
+ find "$(dirname "$(dirname "$bindir")")/Intermediates.noindex/ZqxAppName.build/$(basename "$bindir")/$target-p.build" \
277
+ -name '*.swiftconstvalues' > "$work/constvalues.txt" 2>/dev/null || true
278
+ if [[ ! -s "$work/constvalues.txt" ]]; then
279
+ echo "warning: $target's App Intents weren't added: this Swift keeps the compiler's record where Lamp doesn't look." >&2
280
+ return 0
281
+ fi
282
+ find -L "$PWD/$code" -name '*.swift' > "$work/sources.txt"
283
+ if ! "$PROCESSOR" --toolchain-dir "$toolchain" --module-name "$target" --sdk-root "$(xcrun --sdk macosx --show-sdk-path)" \
284
+ --xcode-version "$(plutil -extract ProductBuildVersion raw "$toolchain/../../../version.plist" 2>/dev/null || echo 0)" \
285
+ --platform-family macOS --deployment-target 14.0 --target-triple "$(uname -m)-apple-macos14.0" \
286
+ --bundle-identifier "$id" --output "$bundle/Contents/Resources" --binary-file "$bundle/Contents/MacOS/$target" \
287
+ --source-file-list "$work/sources.txt" --swift-const-vals-list "$work/constvalues.txt" \
288
+ --metadata-file-list "$work/none.txt" --static-metadata-file-list "$work/none.txt" \
289
+ --compile-time-extraction --deployment-aware-processing --no-app-shortcuts-localization > "$work/log.txt" 2>&1; then
290
+ grep -iE "error|warning" "$work/log.txt" >&2 || cat "$work/log.txt" >&2
291
+ echo "error: $target's App Intents couldn't be read." >&2
292
+ return 1
293
+ fi
294
+ "$(dirname "$PROCESSOR")/appintentsnltrainingprocessor" --infoplist-path "$bundle/Contents/Info.plist" --source-file "$bundle/Contents/Info.plist" \
295
+ --temp-dir-path "$work/ssu" --bundle-id "$id" --product-path "$bundle/Contents/Resources" \
296
+ --extracted-metadata-path "$bundle/Contents/Resources/Metadata.appintents" --metadata-file-list "$work/none.txt" \
297
+ --archive-ssu-assets >> "$work/log.txt" 2>&1 || echo "warning: Siri wasn't taught $target's phrases; Shortcuts still has them." >&2
298
+ }
299
+ BIN="$(swift build "${FLAGS[@]}" --show-bin-path)/ZqxAppName"
300
+ # SwiftPM doesn't relink for the new flags alone: an app first built by a Lamp without them keeps its old
301
+ # binary until the link runs again. Take that binary away once, and it links again with the segment.
302
+ if [ -f "$BIN" ] && ! otool -l "$BIN" 2>/dev/null | grep -qs __RESTRICT; then rm -f "$BIN"; fi
303
+ swift build "${FLAGS[@]}" 2>&1
304
+ if [[ "${LAMP_LIVE:-}" == 1 ]]; then rsync -a --delete "$LIVE/compiling/" "$LIVE/built/"; fi
305
+ APP="build/ZqxAppName.app"
306
+ rm -rf "$APP"
307
+ mkdir -p "$APP/Contents/MacOS"
308
+ cp "$BIN" "$APP/Contents/MacOS/ZqxAppName"
309
+ # SwiftPM records the oldest macOS the app runs on as the SDK it was built with, and macOS draws an app the way
310
+ # the SDK it names did: Liquid Glass only for one built with macOS 26's or later. So the copy names the SDK it
311
+ # was really built with, the oldest macOS staying as it is.
312
+ if SDKVER="$(xcrun --sdk "${SDKROOT:-macosx}" --show-sdk-version 2>/dev/null)" && MINOS="$(otool -l "$APP/Contents/MacOS/ZqxAppName" | awk '/minos/ {print $2; exit}')" && [ -n "$MINOS" ]; then
313
+ xcrun vtool -set-build-version macos "$MINOS" "$SDKVER" -replace -output "$APP/Contents/MacOS/ZqxAppName" "$APP/Contents/MacOS/ZqxAppName" >/dev/null 2>&1 || true
314
+ fi
315
+ cat > "$APP/Contents/Info.plist" <<PLIST
316
+ <?xml version="1.0" encoding="UTF-8"?>
317
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
318
+ <plist version="1.0"><dict>
319
+ <key>CFBundleDevelopmentRegion</key><string>en</string>
320
+ <key>CFBundleExecutable</key><string>ZqxAppName</string>
321
+ <key>CFBundleIdentifier</key><string>dev.lamp.dev.tests.app.zqxappname</string>
322
+ <key>CFBundleName</key><string>${LAMP_APP_NAME}</string>
323
+ <key>CFBundleDisplayName</key><string>${LAMP_APP_NAME}</string>
324
+ <key>CFBundlePackageType</key><string>APPL</string>
325
+ <key>CFBundleShortVersionString</key><string>0.1</string>
326
+ <key>LSMinimumSystemVersion</key><string>14.0</string>
327
+ <key>NSPrincipalClass</key><string>NSApplication</string>
328
+ <key>NSHighResolutionCapable</key><true/>
329
+ ${LAMP_MAC_USAGE}
330
+ </dict></plist>
331
+ PLIST
332
+ # The app's own files (LampAssets). A live build reads them from the app's folder.
333
+ if [[ -d Assets && "${LAMP_LIVE:-}" != 1 ]]; then rm -rf "$APP/Contents/Resources/Assets"; mkdir -p "$APP/Contents/Resources"; cp -R Assets "$APP/Contents/Resources/Assets"; fi
334
+ intents ZqxAppName "$APP" "dev.lamp.dev.tests.app.zqxappname" Sources
335
+ codesign --force -s - "$APP"
336
+ echo "Built $APP"
@@ -0,0 +1,3 @@
1
+ .build/
2
+ build/
3
+ .lamp/
@@ -0,0 +1,6 @@
1
+ {
2
+ "bundle" : "dev.lamp.dev.tests.app.zqxappname",
3
+ "exe" : "ZqxAppName",
4
+ "name" : "Zqx App Name",
5
+ "slug" : "zqxappname"
6
+ }
@@ -0,0 +1,8 @@
1
+ # Zqx App Name
2
+
3
+ A web app built and changed with Lamp: a page in Web/ (HTML, CSS and JavaScript) shown full screen, filling whatever
4
+ it's shown on. It's a Mac app shown in its own window, and goes on an iPhone, an iPad, an Android device, a Samsung
5
+ or LG TV or an Xbox too once it's put there. Lamp looks at it in its window on the Mac, and in a preview at other shapes.
6
+
7
+ ## What it does
8
+ Nothing yet: fresh scaffold.
@@ -0,0 +1 @@
1
+ // The app's own code. Lamp's building blocks are on `Lamp` (lamp.js).
@@ -0,0 +1,17 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
6
+ <title>Zqx App Name</title>
7
+ <link rel="stylesheet" href="style.css">
8
+ </head>
9
+ <body>
10
+ <main id="app">
11
+ <h1>Zqx App Name</h1>
12
+ <p class="status">Lamp is making this app.</p>
13
+ </main>
14
+ <script src="lamp.js"></script>
15
+ <script src="app.js"></script>
16
+ </body>
17
+ </html>
@@ -0,0 +1,5 @@
1
+ {
2
+ "exe" : "ZqxAppName",
3
+ "name" : "Zqx App Name",
4
+ "slug" : "zqxappname"
5
+ }