@lampdotdev/lamp 0.0.0-stage → 0.36.2-nightly.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.
- package/LICENSE +21 -0
- package/README.md +397 -2
- package/Resources/Devices/roku.json +410 -0
- package/Resources/Devices/xbox-one.json +367 -0
- package/Resources/GameKit/NOTICE.md +63 -0
- package/Resources/GameKit/apple/LampPage.swift +1813 -0
- package/Resources/GameKit/apple/LampPlayer.swift +46 -0
- package/Resources/GameKit/apple/LampWebApp.swift +63 -0
- package/Resources/GameKit/apple/LampWebGame.swift +87 -0
- package/Resources/GameKit/apple/Native.swift +12 -0
- package/Resources/GameKit/build.sh +55 -0
- package/Resources/GameKit/lamp_game.h +116 -0
- package/Resources/GameKit/lamp_host.h +19 -0
- package/Resources/GameKit/lamp_kit.cpp +61 -0
- package/Resources/GameKit/lamp_sound.cpp +455 -0
- package/Resources/GameKit/lamp_xbox.cpp +374 -0
- package/Resources/GameKit/libraries/HandmadeMath.h +3940 -0
- package/Resources/GameKit/libraries/cgltf.h +7240 -0
- package/Resources/GameKit/libraries/dr_mp3.h +5430 -0
- package/Resources/GameKit/libraries/dr_wav.h +9209 -0
- package/Resources/GameKit/libraries/sokol_debugtext.h +4754 -0
- package/Resources/GameKit/libraries/sokol_gfx.h +29558 -0
- package/Resources/GameKit/libraries/sokol_gl.h +4538 -0
- package/Resources/GameKit/libraries/sokol_log.h +335 -0
- package/Resources/GameKit/libraries/sokol_shape.h +1531 -0
- package/Resources/GameKit/libraries/stb_image.h +7988 -0
- package/Resources/GameKit/libraries/stb_vorbis.c +5584 -0
- package/Resources/GameKit/page/lamp-live.js +672 -0
- package/Resources/GameKit/scaffold/Game/game.cpp +142 -0
- package/Resources/GameKit/scaffold/Game/scene.glsl +49 -0
- package/Resources/GameKit/scaffold-web/Web/game.js +31 -0
- package/Resources/GameKit/scaffold-web/Web/index.html +13 -0
- package/Resources/GameKit/scaffold-web/Web/making.js +33 -0
- package/Resources/GameKit/scaffold-web/Web/world.js +33 -0
- package/Resources/GameKit/web/lamp-game.js +3042 -0
- package/Resources/GameKit/web/lamp-phaser.js +128 -0
- package/Resources/WebHost/App.exe +0 -0
- package/Resources/WebHost/Microsoft.Web.WebView2.Core.dll +0 -0
- package/Resources/WebHost/WebView2-LICENSE.txt +27 -0
- package/Resources/WebHost/lamp_controllers.h +1506 -0
- package/Resources/WebHost/lamp_web_host.cpp +1173 -0
- package/Resources/WebLibraries/earlier.txt +318 -0
- package/Resources/WebLibraries/phaser/LICENSE.md +20 -0
- package/Resources/WebLibraries/phaser/NOTICE.md +2 -0
- package/Resources/WebLibraries/phaser/phaser.esm.min.js +1 -0
- package/Resources/WebLibraries/qrcode/LICENSE +21 -0
- package/Resources/WebLibraries/qrcode/NOTICE.md +4 -0
- package/Resources/WebLibraries/qrcode/qrcode.js +2297 -0
- package/Resources/WebLibraries/rapier/LICENSE +201 -0
- package/Resources/WebLibraries/rapier/NOTICE.md +3 -0
- package/Resources/WebLibraries/rapier/rapier.js +2 -0
- package/Resources/WebLibraries/three/LICENSE +21 -0
- package/Resources/WebLibraries/three/NOTICE.md +4 -0
- package/Resources/WebLibraries/three/addons/animation/AnimationClipCreator.js +168 -0
- package/Resources/WebLibraries/three/addons/animation/CCDIKSolver.js +607 -0
- package/Resources/WebLibraries/three/addons/controls/ArcballControls.js +3543 -0
- package/Resources/WebLibraries/three/addons/controls/DragControls.js +452 -0
- package/Resources/WebLibraries/three/addons/controls/FirstPersonControls.js +512 -0
- package/Resources/WebLibraries/three/addons/controls/FlyControls.js +384 -0
- package/Resources/WebLibraries/three/addons/controls/MapControls.js +116 -0
- package/Resources/WebLibraries/three/addons/controls/OrbitControls.js +1985 -0
- package/Resources/WebLibraries/three/addons/controls/PointerLockControls.js +264 -0
- package/Resources/WebLibraries/three/addons/controls/TrackballControls.js +1106 -0
- package/Resources/WebLibraries/three/addons/controls/TransformControls.js +2003 -0
- package/Resources/WebLibraries/three/addons/curves/CurveExtras.js +694 -0
- package/Resources/WebLibraries/three/addons/curves/NURBSCurve.js +169 -0
- package/Resources/WebLibraries/three/addons/curves/NURBSSurface.js +98 -0
- package/Resources/WebLibraries/three/addons/curves/NURBSUtils.js +532 -0
- package/Resources/WebLibraries/three/addons/curves/NURBSVolume.js +82 -0
- package/Resources/WebLibraries/three/addons/effects/AnaglyphEffect.js +274 -0
- package/Resources/WebLibraries/three/addons/effects/AsciiEffect.js +323 -0
- package/Resources/WebLibraries/three/addons/effects/OutlineEffect.js +489 -0
- package/Resources/WebLibraries/three/addons/effects/ParallaxBarrierEffect.js +155 -0
- package/Resources/WebLibraries/three/addons/effects/StereoEffect.js +91 -0
- package/Resources/WebLibraries/three/addons/environments/ColorEnvironment.js +59 -0
- package/Resources/WebLibraries/three/addons/environments/DebugEnvironment.js +102 -0
- package/Resources/WebLibraries/three/addons/environments/RoomEnvironment.js +185 -0
- package/Resources/WebLibraries/three/addons/geometries/BoxLineGeometry.js +92 -0
- package/Resources/WebLibraries/three/addons/geometries/ConvexGeometry.js +72 -0
- package/Resources/WebLibraries/three/addons/geometries/DecalGeometry.js +420 -0
- package/Resources/WebLibraries/three/addons/geometries/LoftGeometry.js +355 -0
- package/Resources/WebLibraries/three/addons/geometries/ParametricFunctions.js +100 -0
- package/Resources/WebLibraries/three/addons/geometries/ParametricGeometry.js +172 -0
- package/Resources/WebLibraries/three/addons/geometries/RoundedBoxGeometry.js +216 -0
- package/Resources/WebLibraries/three/addons/geometries/TeapotGeometry.js +689 -0
- package/Resources/WebLibraries/three/addons/geometries/TextGeometry.js +102 -0
- package/Resources/WebLibraries/three/addons/helpers/AnimationPathHelper.js +302 -0
- package/Resources/WebLibraries/three/addons/helpers/LightProbeGridHelper.js +166 -0
- package/Resources/WebLibraries/three/addons/helpers/LightProbeGridHelperWebGL.js +221 -0
- package/Resources/WebLibraries/three/addons/helpers/LightProbeHelper.js +166 -0
- package/Resources/WebLibraries/three/addons/helpers/LightProbeHelperGPU.js +102 -0
- package/Resources/WebLibraries/three/addons/helpers/OctreeHelper.js +109 -0
- package/Resources/WebLibraries/three/addons/helpers/PositionalAudioHelper.js +169 -0
- package/Resources/WebLibraries/three/addons/helpers/RapierHelper.js +59 -0
- package/Resources/WebLibraries/three/addons/helpers/RectAreaLightHelper.js +118 -0
- package/Resources/WebLibraries/three/addons/helpers/TextureHelper.js +265 -0
- package/Resources/WebLibraries/three/addons/helpers/TextureHelperGPU.js +214 -0
- package/Resources/WebLibraries/three/addons/helpers/VertexNormalsHelper.js +155 -0
- package/Resources/WebLibraries/three/addons/helpers/VertexTangentsHelper.js +133 -0
- package/Resources/WebLibraries/three/addons/helpers/ViewHelper.js +529 -0
- package/Resources/WebLibraries/three/addons/interactive/HTMLMesh.js +617 -0
- package/Resources/WebLibraries/three/addons/interactive/InteractiveGroup.js +224 -0
- package/Resources/WebLibraries/three/addons/interactive/SelectionBox.js +324 -0
- package/Resources/WebLibraries/three/addons/interactive/SelectionHelper.js +150 -0
- package/Resources/WebLibraries/three/addons/libs/fflate.module.js +2699 -0
- package/Resources/WebLibraries/three/addons/libs/lil-gui.module.min.js +8 -0
- package/Resources/WebLibraries/three/addons/libs/meshopt_decoder.module.js +196 -0
- package/Resources/WebLibraries/three/addons/libs/potpack.module.js +125 -0
- package/Resources/WebLibraries/three/addons/libs/stats.module.js +167 -0
- package/Resources/WebLibraries/three/addons/libs/tween.module.js +876 -0
- package/Resources/WebLibraries/three/addons/lighting/ClusteredLighting.js +153 -0
- package/Resources/WebLibraries/three/addons/lighting/DynamicLighting.js +82 -0
- package/Resources/WebLibraries/three/addons/lighting/LightMapper.js +295 -0
- package/Resources/WebLibraries/three/addons/lighting/LightProbeGrid.js +923 -0
- package/Resources/WebLibraries/three/addons/lighting/LightProbeGridUtils.js +107 -0
- package/Resources/WebLibraries/three/addons/lighting/LightProbeGridWebGL.js +846 -0
- package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGIConeTracer.js +243 -0
- package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGIIrradiance.js +43 -0
- package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGINode.js +617 -0
- package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGISceneCollector.js +793 -0
- package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGIVolume.js +1440 -0
- package/Resources/WebLibraries/three/addons/lights/LightProbeGenerator.js +337 -0
- package/Resources/WebLibraries/three/addons/lights/RectAreaLightTexturesLib.js +127 -0
- package/Resources/WebLibraries/three/addons/lights/RectAreaLightUniformsLib.js +40 -0
- package/Resources/WebLibraries/three/addons/lights/SunLight.js +100 -0
- package/Resources/WebLibraries/three/addons/lights/SunLightNode.js +56 -0
- package/Resources/WebLibraries/three/addons/lights/SunLightShadow.js +319 -0
- package/Resources/WebLibraries/three/addons/lights/SunShadowNode.js +312 -0
- package/Resources/WebLibraries/three/addons/lines/Line2.js +56 -0
- package/Resources/WebLibraries/three/addons/lines/LineGeometry.js +157 -0
- package/Resources/WebLibraries/three/addons/lines/LineMaterial.js +742 -0
- package/Resources/WebLibraries/three/addons/lines/LineSegments2.js +434 -0
- package/Resources/WebLibraries/three/addons/lines/LineSegmentsGeometry.js +298 -0
- package/Resources/WebLibraries/three/addons/lines/Wireframe.js +108 -0
- package/Resources/WebLibraries/three/addons/lines/WireframeGeometry2.js +49 -0
- package/Resources/WebLibraries/three/addons/lines/webgpu/Line2.js +46 -0
- package/Resources/WebLibraries/three/addons/lines/webgpu/LineSegments2.js +419 -0
- package/Resources/WebLibraries/three/addons/lines/webgpu/Wireframe.js +86 -0
- package/Resources/WebLibraries/three/addons/loaders/EXRLoader.js +3411 -0
- package/Resources/WebLibraries/three/addons/loaders/FBXLoader.js +4660 -0
- package/Resources/WebLibraries/three/addons/loaders/FontLoader.js +262 -0
- package/Resources/WebLibraries/three/addons/loaders/GLTFLoader.js +5006 -0
- package/Resources/WebLibraries/three/addons/loaders/HDRLoader.js +463 -0
- package/Resources/WebLibraries/three/addons/loaders/MTLLoader.js +601 -0
- package/Resources/WebLibraries/three/addons/loaders/OBJLoader.js +961 -0
- package/Resources/WebLibraries/three/addons/loaders/PLYLoader.js +992 -0
- package/Resources/WebLibraries/three/addons/loaders/RGBELoader.js +18 -0
- package/Resources/WebLibraries/three/addons/loaders/STLLoader.js +423 -0
- package/Resources/WebLibraries/three/addons/loaders/SVGLoader.js +3297 -0
- package/Resources/WebLibraries/three/addons/loaders/TGALoader.js +539 -0
- package/Resources/WebLibraries/three/addons/loaders/UltraHDRLoader.js +757 -0
- package/Resources/WebLibraries/three/addons/math/Capsule.js +159 -0
- package/Resources/WebLibraries/three/addons/math/ColorConverter.js +62 -0
- package/Resources/WebLibraries/three/addons/math/ColorSpaces.js +147 -0
- package/Resources/WebLibraries/three/addons/math/ConvexHull.js +1695 -0
- package/Resources/WebLibraries/three/addons/math/ImprovedNoise.js +88 -0
- package/Resources/WebLibraries/three/addons/math/Lut.js +317 -0
- package/Resources/WebLibraries/three/addons/math/MeshSurfaceSampler.js +315 -0
- package/Resources/WebLibraries/three/addons/math/OBB.js +535 -0
- package/Resources/WebLibraries/three/addons/math/Octree.js +825 -0
- package/Resources/WebLibraries/three/addons/math/SimplexNoise.js +470 -0
- package/Resources/WebLibraries/three/addons/misc/ConvexObjectBreaker.js +539 -0
- package/Resources/WebLibraries/three/addons/misc/GPUComputationRenderer.js +508 -0
- package/Resources/WebLibraries/three/addons/misc/Gyroscope.js +78 -0
- package/Resources/WebLibraries/three/addons/misc/MorphAnimMesh.js +119 -0
- package/Resources/WebLibraries/three/addons/misc/MorphBlendMesh.js +425 -0
- package/Resources/WebLibraries/three/addons/misc/ProgressiveLightMap.js +370 -0
- package/Resources/WebLibraries/three/addons/misc/ProgressiveLightMapGPU.js +322 -0
- package/Resources/WebLibraries/three/addons/misc/RollerCoaster.js +661 -0
- package/Resources/WebLibraries/three/addons/misc/Sculptor.js +1679 -0
- package/Resources/WebLibraries/three/addons/misc/SculptorMesh.js +1504 -0
- package/Resources/WebLibraries/three/addons/misc/SculptorTools.js +1180 -0
- package/Resources/WebLibraries/three/addons/misc/SculptorUtils.js +345 -0
- package/Resources/WebLibraries/three/addons/misc/TileCreasedNormalsPlugin.js +270 -0
- package/Resources/WebLibraries/three/addons/misc/TubePainter.js +611 -0
- package/Resources/WebLibraries/three/addons/misc/Volume.js +520 -0
- package/Resources/WebLibraries/three/addons/misc/VolumeSlice.js +275 -0
- package/Resources/WebLibraries/three/addons/modifiers/CurveModifier.js +374 -0
- package/Resources/WebLibraries/three/addons/modifiers/CurveModifierGPU.js +256 -0
- package/Resources/WebLibraries/three/addons/modifiers/EdgeSplitModifier.js +299 -0
- package/Resources/WebLibraries/three/addons/modifiers/TessellateModifier.js +340 -0
- package/Resources/WebLibraries/three/addons/objects/GroundedSkybox.js +69 -0
- package/Resources/WebLibraries/three/addons/objects/Lensflare.js +489 -0
- package/Resources/WebLibraries/three/addons/objects/LensflareMesh.js +376 -0
- package/Resources/WebLibraries/three/addons/objects/MarchingCubes.js +1261 -0
- package/Resources/WebLibraries/three/addons/objects/Reflector.js +390 -0
- package/Resources/WebLibraries/three/addons/objects/ReflectorForSSRPass.js +393 -0
- package/Resources/WebLibraries/three/addons/objects/Refractor.js +389 -0
- package/Resources/WebLibraries/three/addons/objects/ShadowMesh.js +130 -0
- package/Resources/WebLibraries/three/addons/objects/Sky.js +342 -0
- package/Resources/WebLibraries/three/addons/objects/SkyMesh.js +403 -0
- package/Resources/WebLibraries/three/addons/objects/Water.js +374 -0
- package/Resources/WebLibraries/three/addons/objects/Water2.js +403 -0
- package/Resources/WebLibraries/three/addons/objects/Water2Mesh.js +199 -0
- package/Resources/WebLibraries/three/addons/objects/WaterMesh.js +194 -0
- package/Resources/WebLibraries/three/addons/postprocessing/AfterimagePass.js +187 -0
- package/Resources/WebLibraries/three/addons/postprocessing/BloomPass.js +274 -0
- package/Resources/WebLibraries/three/addons/postprocessing/BokehPass.js +218 -0
- package/Resources/WebLibraries/three/addons/postprocessing/ClearPass.js +97 -0
- package/Resources/WebLibraries/three/addons/postprocessing/CubeTexturePass.js +146 -0
- package/Resources/WebLibraries/three/addons/postprocessing/DotScreenPass.js +114 -0
- package/Resources/WebLibraries/three/addons/postprocessing/EffectComposer.js +365 -0
- package/Resources/WebLibraries/three/addons/postprocessing/FXAAPass.js +40 -0
- package/Resources/WebLibraries/three/addons/postprocessing/FilmPass.js +113 -0
- package/Resources/WebLibraries/three/addons/postprocessing/GTAOPass.js +735 -0
- package/Resources/WebLibraries/three/addons/postprocessing/GlitchPass.js +177 -0
- package/Resources/WebLibraries/three/addons/postprocessing/HalftonePass.js +134 -0
- package/Resources/WebLibraries/three/addons/postprocessing/LUTPass.js +138 -0
- package/Resources/WebLibraries/three/addons/postprocessing/MaskPass.js +195 -0
- package/Resources/WebLibraries/three/addons/postprocessing/OutlinePass.js +776 -0
- package/Resources/WebLibraries/three/addons/postprocessing/OutputPass.js +148 -0
- package/Resources/WebLibraries/three/addons/postprocessing/Pass.js +191 -0
- package/Resources/WebLibraries/three/addons/postprocessing/RenderPass.js +193 -0
- package/Resources/WebLibraries/three/addons/postprocessing/RenderPixelatedPass.js +314 -0
- package/Resources/WebLibraries/three/addons/postprocessing/RenderTransitionPass.js +267 -0
- package/Resources/WebLibraries/three/addons/postprocessing/SAOPass.js +407 -0
- package/Resources/WebLibraries/three/addons/postprocessing/SMAAPass.js +230 -0
- package/Resources/WebLibraries/three/addons/postprocessing/SSAARenderPass.js +313 -0
- package/Resources/WebLibraries/three/addons/postprocessing/SSAOPass.js +527 -0
- package/Resources/WebLibraries/three/addons/postprocessing/SSRPass.js +858 -0
- package/Resources/WebLibraries/three/addons/postprocessing/SavePass.js +132 -0
- package/Resources/WebLibraries/three/addons/postprocessing/ShaderPass.js +135 -0
- package/Resources/WebLibraries/three/addons/postprocessing/TAARenderPass.js +243 -0
- package/Resources/WebLibraries/three/addons/postprocessing/TexturePass.js +131 -0
- package/Resources/WebLibraries/three/addons/postprocessing/UnrealBloomPass.js +541 -0
- package/Resources/WebLibraries/three/addons/shaders/ACESFilmicToneMappingShader.js +96 -0
- package/Resources/WebLibraries/three/addons/shaders/AfterimageShader.js +63 -0
- package/Resources/WebLibraries/three/addons/shaders/BasicShader.js +36 -0
- package/Resources/WebLibraries/three/addons/shaders/BleachBypassShader.js +68 -0
- package/Resources/WebLibraries/three/addons/shaders/BlendShader.js +56 -0
- package/Resources/WebLibraries/three/addons/shaders/BokehShader.js +151 -0
- package/Resources/WebLibraries/three/addons/shaders/BokehShader2.js +404 -0
- package/Resources/WebLibraries/three/addons/shaders/BrightnessContrastShader.js +62 -0
- package/Resources/WebLibraries/three/addons/shaders/ColorCorrectionShader.js +59 -0
- package/Resources/WebLibraries/three/addons/shaders/ColorifyShader.js +57 -0
- package/Resources/WebLibraries/three/addons/shaders/ConvolutionShader.js +74 -0
- package/Resources/WebLibraries/three/addons/shaders/CopyShader.js +52 -0
- package/Resources/WebLibraries/three/addons/shaders/DOFMipMapShader.js +63 -0
- package/Resources/WebLibraries/three/addons/shaders/DepthLimitedBlurShader.js +183 -0
- package/Resources/WebLibraries/three/addons/shaders/DigitalGlitch.js +104 -0
- package/Resources/WebLibraries/three/addons/shaders/DotScreenShader.js +75 -0
- package/Resources/WebLibraries/three/addons/shaders/ExposureShader.js +51 -0
- package/Resources/WebLibraries/three/addons/shaders/FXAAShader.js +298 -0
- package/Resources/WebLibraries/three/addons/shaders/FilmShader.js +73 -0
- package/Resources/WebLibraries/three/addons/shaders/FocusShader.js +94 -0
- package/Resources/WebLibraries/three/addons/shaders/FreiChenShader.js +103 -0
- package/Resources/WebLibraries/three/addons/shaders/GTAOShader.js +437 -0
- package/Resources/WebLibraries/three/addons/shaders/GammaCorrectionShader.js +52 -0
- package/Resources/WebLibraries/three/addons/shaders/HalftoneShader.js +332 -0
- package/Resources/WebLibraries/three/addons/shaders/HorizontalBlurShader.js +68 -0
- package/Resources/WebLibraries/three/addons/shaders/HorizontalTiltShiftShader.js +70 -0
- package/Resources/WebLibraries/three/addons/shaders/HueSaturationShader.js +74 -0
- package/Resources/WebLibraries/three/addons/shaders/KaleidoShader.js +65 -0
- package/Resources/WebLibraries/three/addons/shaders/LuminosityHighPassShader.js +68 -0
- package/Resources/WebLibraries/three/addons/shaders/LuminosityShader.js +54 -0
- package/Resources/WebLibraries/three/addons/shaders/MirrorShader.js +62 -0
- package/Resources/WebLibraries/three/addons/shaders/NormalMapShader.js +60 -0
- package/Resources/WebLibraries/three/addons/shaders/OutputShader.js +103 -0
- package/Resources/WebLibraries/three/addons/shaders/PoissonDenoiseShader.js +230 -0
- package/Resources/WebLibraries/three/addons/shaders/RGBShiftShader.js +61 -0
- package/Resources/WebLibraries/three/addons/shaders/SAOShader.js +201 -0
- package/Resources/WebLibraries/three/addons/shaders/SMAAShader.js +489 -0
- package/Resources/WebLibraries/three/addons/shaders/SSAOShader.js +331 -0
- package/Resources/WebLibraries/three/addons/shaders/SSRShader.js +396 -0
- package/Resources/WebLibraries/three/addons/shaders/SepiaShader.js +57 -0
- package/Resources/WebLibraries/three/addons/shaders/SobelOperatorShader.js +98 -0
- package/Resources/WebLibraries/three/addons/shaders/SubsurfaceScatteringShader.js +95 -0
- package/Resources/WebLibraries/three/addons/shaders/TechnicolorShader.js +51 -0
- package/Resources/WebLibraries/three/addons/shaders/ToonShader.js +349 -0
- package/Resources/WebLibraries/three/addons/shaders/TriangleBlurShader.js +79 -0
- package/Resources/WebLibraries/three/addons/shaders/UnpackDepthRGBAShader.js +60 -0
- package/Resources/WebLibraries/three/addons/shaders/VelocityShader.js +137 -0
- package/Resources/WebLibraries/three/addons/shaders/VerticalBlurShader.js +66 -0
- package/Resources/WebLibraries/three/addons/shaders/VerticalTiltShiftShader.js +70 -0
- package/Resources/WebLibraries/three/addons/shaders/VignetteShader.js +56 -0
- package/Resources/WebLibraries/three/addons/shaders/VolumeShader.js +285 -0
- package/Resources/WebLibraries/three/addons/shaders/WaterRefractionShader.js +106 -0
- package/Resources/WebLibraries/three/addons/textures/FlakesTexture.js +54 -0
- package/Resources/WebLibraries/three/addons/tsl/WebGLNodesHandler.js +607 -0
- package/Resources/WebLibraries/three/addons/tsl/display/AfterImageNode.js +256 -0
- package/Resources/WebLibraries/three/addons/tsl/display/AnaglyphPassNode.js +550 -0
- package/Resources/WebLibraries/three/addons/tsl/display/BilateralBlurNode.js +377 -0
- package/Resources/WebLibraries/three/addons/tsl/display/BleachBypass.js +33 -0
- package/Resources/WebLibraries/three/addons/tsl/display/BloomNode.js +599 -0
- package/Resources/WebLibraries/three/addons/tsl/display/CRT.js +150 -0
- package/Resources/WebLibraries/three/addons/tsl/display/ChromaticAberrationNode.js +163 -0
- package/Resources/WebLibraries/three/addons/tsl/display/DenoiseNode.js +354 -0
- package/Resources/WebLibraries/three/addons/tsl/display/DepthOfFieldNode.js +572 -0
- package/Resources/WebLibraries/three/addons/tsl/display/DotScreenNode.js +104 -0
- package/Resources/WebLibraries/three/addons/tsl/display/FSR1Node.js +481 -0
- package/Resources/WebLibraries/three/addons/tsl/display/FXAANode.js +357 -0
- package/Resources/WebLibraries/three/addons/tsl/display/FilmNode.js +101 -0
- package/Resources/WebLibraries/three/addons/tsl/display/GTAONode.js +727 -0
- package/Resources/WebLibraries/three/addons/tsl/display/GaussianBlurNode.js +412 -0
- package/Resources/WebLibraries/three/addons/tsl/display/GodraysNode.js +604 -0
- package/Resources/WebLibraries/three/addons/tsl/display/ImportanceSampledEnvironment.js +564 -0
- package/Resources/WebLibraries/three/addons/tsl/display/LensflareNode.js +282 -0
- package/Resources/WebLibraries/three/addons/tsl/display/Lut3DNode.js +109 -0
- package/Resources/WebLibraries/three/addons/tsl/display/MotionBlur.js +33 -0
- package/Resources/WebLibraries/three/addons/tsl/display/OITPassNode.js +341 -0
- package/Resources/WebLibraries/three/addons/tsl/display/OutlineNode.js +916 -0
- package/Resources/WebLibraries/three/addons/tsl/display/ParallaxBarrierPassNode.js +90 -0
- package/Resources/WebLibraries/three/addons/tsl/display/PixelationPassNode.js +227 -0
- package/Resources/WebLibraries/three/addons/tsl/display/RGBShiftNode.js +96 -0
- package/Resources/WebLibraries/three/addons/tsl/display/RecurrentDenoiseNode.js +812 -0
- package/Resources/WebLibraries/three/addons/tsl/display/RetroPassNode.js +263 -0
- package/Resources/WebLibraries/three/addons/tsl/display/SMAANode.js +729 -0
- package/Resources/WebLibraries/three/addons/tsl/display/SSAAPassNode.js +344 -0
- package/Resources/WebLibraries/three/addons/tsl/display/SSAONode.js +422 -0
- package/Resources/WebLibraries/three/addons/tsl/display/SSGINode.js +698 -0
- package/Resources/WebLibraries/three/addons/tsl/display/SSRNode.js +1430 -0
- package/Resources/WebLibraries/three/addons/tsl/display/SSSNode.js +479 -0
- package/Resources/WebLibraries/three/addons/tsl/display/Sepia.js +24 -0
- package/Resources/WebLibraries/three/addons/tsl/display/Shape.js +29 -0
- package/Resources/WebLibraries/three/addons/tsl/display/SharpenNode.js +284 -0
- package/Resources/WebLibraries/three/addons/tsl/display/SobelOperatorNode.js +168 -0
- package/Resources/WebLibraries/three/addons/tsl/display/StereoCompositePassNode.js +190 -0
- package/Resources/WebLibraries/three/addons/tsl/display/StereoPassNode.js +117 -0
- package/Resources/WebLibraries/three/addons/tsl/display/TAAUNode.js +700 -0
- package/Resources/WebLibraries/three/addons/tsl/display/TRAANode.js +609 -0
- package/Resources/WebLibraries/three/addons/tsl/display/TemporalReprojectNode.js +1024 -0
- package/Resources/WebLibraries/three/addons/tsl/display/TransitionNode.js +141 -0
- package/Resources/WebLibraries/three/addons/tsl/display/boxBlur.js +65 -0
- package/Resources/WebLibraries/three/addons/tsl/display/depthAwareBlend.js +80 -0
- package/Resources/WebLibraries/three/addons/tsl/display/depthAwareBlur.js +63 -0
- package/Resources/WebLibraries/three/addons/tsl/display/hashBlur.js +55 -0
- package/Resources/WebLibraries/three/addons/tsl/display/lensDirt.js +30 -0
- package/Resources/WebLibraries/three/addons/tsl/display/radialBlur.js +68 -0
- package/Resources/WebLibraries/three/addons/tsl/lighting/ClusteredLightsNode.js +994 -0
- package/Resources/WebLibraries/three/addons/tsl/lighting/DynamicLightsNode.js +201 -0
- package/Resources/WebLibraries/three/addons/tsl/lighting/LightProbeGridNode.js +183 -0
- package/Resources/WebLibraries/three/addons/tsl/lighting/data/AmbientLightDataNode.js +67 -0
- package/Resources/WebLibraries/three/addons/tsl/lighting/data/DirectionalLightDataNode.js +117 -0
- package/Resources/WebLibraries/three/addons/tsl/lighting/data/HemisphereLightDataNode.js +105 -0
- package/Resources/WebLibraries/three/addons/tsl/lighting/data/PointLightDataNode.js +140 -0
- package/Resources/WebLibraries/three/addons/tsl/lighting/data/SpotLightDataNode.js +167 -0
- package/Resources/WebLibraries/three/addons/tsl/math/Bayer.js +84 -0
- package/Resources/WebLibraries/three/addons/tsl/math/curlNoise.js +107 -0
- package/Resources/WebLibraries/three/addons/tsl/math/voronoiNoise.js +112 -0
- package/Resources/WebLibraries/three/addons/tsl/shadows/TileShadowNode.js +542 -0
- package/Resources/WebLibraries/three/addons/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/Resources/WebLibraries/three/addons/tsl/utils/GroundedSkybox.js +62 -0
- package/Resources/WebLibraries/three/addons/tsl/utils/RNoise.js +51 -0
- package/Resources/WebLibraries/three/addons/tsl/utils/Raymarching.js +70 -0
- package/Resources/WebLibraries/three/addons/tsl/utils/SoftParticles.js +53 -0
- package/Resources/WebLibraries/three/addons/tsl/utils/SpecularHelpers.js +302 -0
- package/Resources/WebLibraries/three/addons/tsl/utils/TAAUtils.js +184 -0
- package/Resources/WebLibraries/three/addons/utils/BufferGeometryUtils.js +1523 -0
- package/Resources/WebLibraries/three/addons/utils/CameraUtils.js +82 -0
- package/Resources/WebLibraries/three/addons/utils/ColorUtils.js +76 -0
- package/Resources/WebLibraries/three/addons/utils/GaussianSplatUtils.js +229 -0
- package/Resources/WebLibraries/three/addons/utils/GeometryCompressionUtils.js +547 -0
- package/Resources/WebLibraries/three/addons/utils/GeometryUtils.js +226 -0
- package/Resources/WebLibraries/three/addons/utils/LDrawUtils.js +211 -0
- package/Resources/WebLibraries/three/addons/utils/SceneOptimizer.js +459 -0
- package/Resources/WebLibraries/three/addons/utils/SceneUtils.js +363 -0
- package/Resources/WebLibraries/three/addons/utils/ShadowMapViewer.js +244 -0
- package/Resources/WebLibraries/three/addons/utils/ShadowMapViewerGPU.js +233 -0
- package/Resources/WebLibraries/three/addons/utils/SkeletonUtils.js +496 -0
- package/Resources/WebLibraries/three/addons/utils/SortUtils.js +175 -0
- package/Resources/WebLibraries/three/addons/utils/UVsDebug.js +173 -0
- package/Resources/WebLibraries/three/addons/utils/WebGLTextureUtils.js +115 -0
- package/Resources/WebLibraries/three/addons/utils/WebGPUTextureUtils.js +81 -0
- package/Resources/WebLibraries/three/addons/utils/WorkerPool.js +167 -0
- package/Resources/WebLibraries/three/addons/utils/unwrapUVs.js +865 -0
- package/Resources/WebLibraries/three/three.core.js +61162 -0
- package/Resources/WebLibraries/three/three.module.js +19537 -0
- package/Resources/WebLibraries/three/three.tsl.js +41903 -0
- package/Resources/WebLibraries/three/three.webgpu.js +53714 -0
- package/Resources/share-rules.json +64 -0
- package/Resources/skills/2d-game/SKILL.md +305 -0
- package/Resources/skills/3d-game/SKILL.md +274 -0
- package/Resources/skills/accounts/SKILL.md +41 -0
- package/Resources/skills/android-design/SKILL.md +159 -0
- package/Resources/skills/app-ai/SKILL.md +154 -0
- package/Resources/skills/app-intents/SKILL.md +31 -0
- package/Resources/skills/app-kinds/SKILL.md +122 -0
- package/Resources/skills/apple-watch/SKILL.md +43 -0
- package/Resources/skills/assets/SKILL.md +183 -0
- package/Resources/skills/building-blocks/SKILL.md +97 -0
- package/Resources/skills/device-control/SKILL.md +56 -0
- package/Resources/skills/device-integrations/SKILL.md +278 -0
- package/Resources/skills/finder-files/SKILL.md +19 -0
- package/Resources/skills/game/SKILL.md +416 -0
- package/Resources/skills/game-3d/SKILL.md +12 -0
- package/Resources/skills/game-art/SKILL.md +11 -0
- package/Resources/skills/game-feel/SKILL.md +13 -0
- package/Resources/skills/game-levels/SKILL.md +12 -0
- package/Resources/skills/game-live/SKILL.md +12 -0
- package/Resources/skills/game-physics/SKILL.md +13 -0
- package/Resources/skills/game-playtest/SKILL.md +26 -0
- package/Resources/skills/game-ui/SKILL.md +278 -0
- package/Resources/skills/github-projects/SKILL.md +62 -0
- package/Resources/skills/icloud-sync/SKILL.md +30 -0
- package/Resources/skills/iphone-hardware/SKILL.md +57 -0
- package/Resources/skills/iphone-widgets/SKILL.md +53 -0
- package/Resources/skills/lg-developer-mode/SKILL.md +152 -0
- package/Resources/skills/mac-widgets/SKILL.md +60 -0
- package/Resources/skills/maps/SKILL.md +8 -0
- package/Resources/skills/menu-bar/SKILL.md +36 -0
- package/Resources/skills/more-apps/SKILL.md +53 -0
- package/Resources/skills/phone-controllers/SKILL.md +79 -0
- package/Resources/skills/phone-pages/SKILL.md +173 -0
- package/Resources/skills/roku-developer-mode/SKILL.md +106 -0
- package/Resources/skills/scene-3d/SKILL.md +27 -0
- package/Resources/skills/scripting/SKILL.md +17 -0
- package/Resources/skills/share-extension/SKILL.md +22 -0
- package/Resources/skills/tv-design/SKILL.md +72 -0
- package/Resources/skills/web-app/SKILL.md +170 -0
- package/Resources/skills/web-game/SKILL.md +95 -0
- package/Resources/skills/web-or-native/SKILL.md +108 -0
- package/Resources/skills/wish-links/SKILL.md +156 -0
- package/THIRD_PARTY_NOTICES.md +170 -0
- package/cli/ai.mjs +237 -0
- package/cli/android.mjs +941 -0
- package/cli/app-ai.mjs +473 -0
- package/cli/browser.mjs +284 -0
- package/cli/calls.mjs +594 -0
- package/cli/dev.mjs +820 -0
- package/cli/devices.mjs +984 -0
- package/cli/lamp.mjs +1326 -0
- package/cli/lampapp.mjs +332 -0
- package/cli/lamps/android-host/LampPageGateway.kt +345 -0
- package/cli/lamps/android-host/app/build.gradle.kts +40 -0
- package/cli/lamps/android-host/build.gradle.kts +4 -0
- package/cli/lamps/android-host/game/AndroidManifest.xml +33 -0
- package/cli/lamps/android-host/game/MainActivity.kt +173 -0
- package/cli/lamps/android-host/gradle/libs.versions.toml +39 -0
- package/cli/lamps/android-host/gradle.properties +8 -0
- package/cli/lamps/android-host/page/AndroidManifest.xml +35 -0
- package/cli/lamps/android-host/page/MainActivity.kt +193 -0
- package/cli/lamps/android-host/settings.gradle.kts +30 -0
- package/cli/lamps/android-host/tools.json +43 -0
- package/cli/lamps/lamp-controllers.js +2 -0
- package/cli/lamps/lamp-for-games.js +6922 -0
- package/cli/lamps/lamp.js +7082 -0
- package/cli/lamps/mac-starter/.lamp/meta.json +1 -0
- package/cli/lamps/mac-starter/APP.md +12 -0
- package/cli/lamps/mac-starter/Package.swift +8 -0
- package/cli/lamps/mac-starter/Sources/App.swift +11 -0
- package/cli/lamps/mac-starter/Sources/ContentView.swift +17 -0
- package/cli/lamps/mac-starter/Sources/LampSupport.swift +18215 -0
- package/cli/lamps/mac-starter/build.sh +336 -0
- package/cli/lamps/mac-starter/gitignore +3 -0
- package/cli/lamps/mac-starter/lamp-starter.json +6 -0
- package/cli/lamps/web-starter/APP.md +8 -0
- package/cli/lamps/web-starter/app.js +1 -0
- package/cli/lamps/web-starter/index.html +17 -0
- package/cli/lamps/web-starter/lamp-starter.json +5 -0
- package/cli/lamps/web-starter/lamp.js +7082 -0
- package/cli/lamps/web-starter/style.css +25 -0
- package/cli/link.mjs +202 -0
- package/cli/local-ai.mjs +193 -0
- package/cli/mac.mjs +621 -0
- package/cli/mdns.mjs +205 -0
- package/cli/msix.mjs +413 -0
- package/cli/network.mjs +209 -0
- package/cli/openrouter.mjs +133 -0
- package/cli/outside.mjs +203 -0
- package/cli/page.js +317 -0
- package/cli/place.mjs +298 -0
- package/cli/png.mjs +184 -0
- package/cli/share.mjs +270 -0
- package/cli/skill/SKILL.md +280 -0
- package/cli/skills.mjs +71 -0
- package/cli/state.mjs +176 -0
- package/cli/update.mjs +162 -0
- package/package.json +20 -4
- package/site/lib/quota.js +59 -0
- package/site/lib/shared-wishes.js +1727 -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,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>
|