create-swdg-frontend 0.1.7 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -13
- package/bin/index.js +3 -244
- package/lib/argv.js +43 -0
- package/lib/cli.js +141 -0
- package/lib/constants.js +24 -0
- package/lib/gis.js +92 -0
- package/lib/manifest.js +23 -0
- package/lib/prompts.js +55 -0
- package/lib/scaffold.js +118 -0
- package/package.json +6 -2
- package/scripts/sync-template.js +120 -0
- package/scripts/validate-template.mjs +74 -0
- package/stubs/tsconfig.node.json +11 -0
- package/stubs/types-env.d.ts +9 -0
- package/stubs/vite.config.ts +64 -0
- package/template/.env.example +6 -0
- package/template/.github/workflows/ci.yml +23 -0
- package/template/.github/workflows/release.yml +69 -0
- package/template/.stylelintrc.json +7 -1
- package/template/README.md +95 -32
- package/template/auto-imports.d.ts +10 -0
- package/template/docs/MAINTAINER.md +77 -0
- package/template/docs/ONBOARDING.md +284 -0
- package/template/docs/TESTING.md +104 -0
- package/template/package.json +48 -41
- package/template/pnpm-lock.yaml +6360 -0
- package/template/scripts/gen-api.cjs +20 -7
- package/template/scripts/release.mjs +22 -28
- package/template/scripts/set-release-version.mjs +46 -0
- package/template/scripts/test-pipeline.mjs +85 -0
- package/template/scripts/test-scaffold.mjs +197 -0
- package/template/scripts/test-template.mjs +52 -0
- package/template/scripts/verify.mjs +28 -0
- package/template/scripts/vite-plugin-cesium-dev.ts +56 -0
- package/template/src/api/README.md +4 -0
- package/template/src/components/Body/index.vue +65 -35
- package/template/src/components/CesiumViewer/index.vue +36 -0
- package/template/src/components/Header/index.vue +16 -5
- package/template/src/components/OnboardingDeck/index.vue +449 -0
- package/template/src/data/onboardingSlides.ts +208 -0
- package/template/src/main.ts +1 -0
- package/template/src/router/index.ts +20 -14
- package/template/src/router/routeUtils.ts +13 -0
- package/template/src/styles/shell.css +232 -0
- package/template/src/utils/axios-middleware.js +1 -1
- package/template/src/utils/cesium/index.ts +71 -0
- package/template/src/utils/composables/useFeatureGis.ts +24 -0
- package/template/src/views/examples/cesium/index.vue +85 -0
- package/template/src/views/examples/guide/index.vue +42 -0
- package/template/src/views/examples/test/index.vue +63 -0
- package/template/src/views/index.vue +2 -3
- package/template/tests/README.md +1 -0
- package/template/tests/unit/onboardingSlides.test.ts +20 -0
- package/template/tests/unit/router.utils.test.ts +21 -0
- package/template/tests/unit/scaffold.lib.test.ts +44 -0
- package/template/tests/unit/useFeatureGis.test.ts +14 -0
- package/template/tsconfig.json +17 -17
- package/template/tsconfig.node.json +1 -1
- package/template/types/env.d.ts +13 -0
- package/template/vite.config.ts +26 -5
- package/template/vitest.config.ts +13 -0
- package/template/.env +0 -1
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_0.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_1.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_10.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_11.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_12.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_13.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_14.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_15.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_16.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_17.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_18.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_19.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_2.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_20.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_21.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_22.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_23.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_24.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_25.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_26.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_27.json +0 -438
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_3.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_4.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_5.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_6.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_7.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_8.json +0 -1012
- package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_9.json +0 -1012
- package/template/public/Cesium1.119/Assets/Images/bing_maps_credit.png +0 -0
- package/template/public/Cesium1.119/Assets/Images/cesium_credit.png +0 -0
- package/template/public/Cesium1.119/Assets/Images/google_earth_credit.png +0 -0
- package/template/public/Cesium1.119/Assets/Images/ion-credit.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/LensFlare/DirtMask.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/LensFlare/StarBurst.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/0/0/0.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/0/1/0.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/0/0.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/0/1.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/1/0.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/1/1.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/2/0.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/2/1.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/3/0.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/3/1.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/0/0.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/0/1.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/0/2.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/0/3.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/1/0.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/1/1.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/1/2.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/1/3.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/2/0.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/2/1.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/2/2.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/2/3.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/3/0.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/3/1.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/3/2.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/3/3.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/4/0.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/4/1.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/4/2.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/4/3.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/5/0.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/5/1.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/5/2.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/5/3.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/6/0.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/6/1.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/6/2.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/6/3.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/7/0.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/7/1.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/7/2.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/7/3.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/tilemapresource.xml +0 -14
- package/template/public/Cesium1.119/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/SkyBox/tycho2t3_80_my.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/SkyBox/tycho2t3_80_px.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/SkyBox/tycho2t3_80_py.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/airfield.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/airport.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/alcohol-shop.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/america-football.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/art-gallery.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/bakery.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/bank.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/bar.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/baseball.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/basketball.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/beer.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/bicycle.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/building.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/bus.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/cafe.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/camera.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/campsite.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/car.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/cemetery.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/cesium.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/chemist.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/cinema.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/circle-stroked.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/circle.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/city.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/clothing-store.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/college.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/commercial.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/cricket.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/cross.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/dam.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/danger.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/disability.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/dog-park.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/embassy.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/emergency-telephone.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/entrance.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/farm.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/fast-food.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/ferry.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/fire-station.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/fuel.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/garden.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/gift.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/golf.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/grocery.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/hairdresser.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/harbor.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/heart.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/heliport.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/hospital.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/ice-cream.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/industrial.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/land-use.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/laundry.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/library.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/lighthouse.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/lodging.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/logging.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/london-underground.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/marker-stroked.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/marker.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/minefield.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/mobilephone.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/monument.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/museum.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/music.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/oil-well.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/park.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/park2.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/parking-garage.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/parking.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/pharmacy.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/pitch.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/place-of-worship.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/playground.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/police.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/polling-place.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/post.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/prison.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/rail-above.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/rail-light.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/rail-metro.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/rail-underground.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/rail.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/religious-christian.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/religious-jewish.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/religious-muslim.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/restaurant.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/roadblock.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/rocket.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/school.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/scooter.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/shop.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/skiing.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/slaughterhouse.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/soccer.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/square-stroked.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/square.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/star-stroked.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/star.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/suitcase.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/swimming.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/telephone.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/tennis.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/theatre.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/toilets.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/town-hall.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/town.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/triangle-stroked.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/triangle.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/village.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/warehouse.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/waste-basket.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/water.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/wetland.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/maki/zoo.png +0 -0
- package/template/public/Cesium1.119/Assets/Textures/moonSmall.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/pin.svg +0 -1
- package/template/public/Cesium1.119/Assets/Textures/waterNormals.jpg +0 -0
- package/template/public/Cesium1.119/Assets/Textures/waterNormalsSmall.jpg +0 -0
- package/template/public/Cesium1.119/Assets/approximateTerrainHeights.json +0 -10924
- package/template/public/Cesium1.119/Cesium.js +0 -185772
- package/template/public/Cesium1.119/ThirdParty/Workers/package.json +0 -3
- package/template/public/Cesium1.119/ThirdParty/Workers/pako_deflate.min.js +0 -1681
- package/template/public/Cesium1.119/ThirdParty/Workers/pako_inflate.min.js +0 -1489
- package/template/public/Cesium1.119/ThirdParty/Workers/z-worker-pako.js +0 -1070
- package/template/public/Cesium1.119/ThirdParty/basis_transcoder.wasm +0 -0
- package/template/public/Cesium1.119/ThirdParty/draco_decoder.wasm +0 -0
- package/template/public/Cesium1.119/ThirdParty/google-earth-dbroot-parser.js +0 -11424
- package/template/public/Cesium1.119/Widgets/Animation/Animation.css +0 -127
- package/template/public/Cesium1.119/Widgets/Animation/lighter.css +0 -78
- package/template/public/Cesium1.119/Widgets/BaseLayerPicker/BaseLayerPicker.css +0 -112
- package/template/public/Cesium1.119/Widgets/BaseLayerPicker/lighter.css +0 -28
- package/template/public/Cesium1.119/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css +0 -104
- package/template/public/Cesium1.119/Widgets/CesiumInspector/CesiumInspector.css +0 -115
- package/template/public/Cesium1.119/Widgets/CesiumWidget/CesiumWidget.css +0 -119
- package/template/public/Cesium1.119/Widgets/CesiumWidget/lighter.css +0 -14
- package/template/public/Cesium1.119/Widgets/FullscreenButton/FullscreenButton.css +0 -8
- package/template/public/Cesium1.119/Widgets/Geocoder/Geocoder.css +0 -72
- package/template/public/Cesium1.119/Widgets/Geocoder/lighter.css +0 -17
- package/template/public/Cesium1.119/Widgets/I3SBuildingSceneLayerExplorer/I3SBuildingSceneLayerExplorer.css +0 -27
- package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldHillshade.png +0 -0
- package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldImagery.png +0 -0
- package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldOcean.png +0 -0
- package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/bingAerial.png +0 -0
- package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/bingAerialLabels.png +0 -0
- package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/bingRoads.png +0 -0
- package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/blueMarble.png +0 -0
- package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/earthAtNight.png +0 -0
- package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/mapQuestOpenStreetMap.png +0 -0
- package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/mapboxSatellite.png +0 -0
- package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/mapboxStreets.png +0 -0
- package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/mapboxTerrain.png +0 -0
- package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/naturalEarthII.png +0 -0
- package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/openStreetMap.png +0 -0
- package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/sentinel-2.png +0 -0
- package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/stadiaAlidadeSmooth.png +0 -0
- package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/stadiaAlidadeSmoothDark.png +0 -0
- package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/stamenToner.png +0 -0
- package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/stamenWatercolor.png +0 -0
- package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/Mouse.svg +0 -84
- package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/MouseLeft.svg +0 -76
- package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/MouseMiddle.svg +0 -76
- package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/MouseRight.svg +0 -76
- package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/Touch.svg +0 -120
- package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/TouchDrag.svg +0 -129
- package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/TouchRotate.svg +0 -76
- package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/TouchTilt.svg +0 -135
- package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/TouchZoom.svg +0 -74
- package/template/public/Cesium1.119/Widgets/Images/TerrainProviders/CesiumWorldTerrain.png +0 -0
- package/template/public/Cesium1.119/Widgets/Images/TerrainProviders/Ellipsoid.png +0 -0
- package/template/public/Cesium1.119/Widgets/Images/TimelineIcons.png +0 -0
- package/template/public/Cesium1.119/Widgets/Images/info-loading.gif +0 -0
- package/template/public/Cesium1.119/Widgets/InfoBox/InfoBox.css +0 -94
- package/template/public/Cesium1.119/Widgets/InfoBox/InfoBoxDescription.css +0 -178
- package/template/public/Cesium1.119/Widgets/NavigationHelpButton/NavigationHelpButton.css +0 -95
- package/template/public/Cesium1.119/Widgets/NavigationHelpButton/lighter.css +0 -38
- package/template/public/Cesium1.119/Widgets/PerformanceWatchdog/PerformanceWatchdog.css +0 -15
- package/template/public/Cesium1.119/Widgets/ProjectionPicker/ProjectionPicker.css +0 -46
- package/template/public/Cesium1.119/Widgets/SceneModePicker/SceneModePicker.css +0 -72
- package/template/public/Cesium1.119/Widgets/SelectionIndicator/SelectionIndicator.css +0 -22
- package/template/public/Cesium1.119/Widgets/Timeline/Timeline.css +0 -103
- package/template/public/Cesium1.119/Widgets/Timeline/lighter.css +0 -18
- package/template/public/Cesium1.119/Widgets/VRButton/VRButton.css +0 -8
- package/template/public/Cesium1.119/Widgets/Viewer/Viewer.css +0 -107
- package/template/public/Cesium1.119/Widgets/VoxelInspector/VoxelInspector.css +0 -18
- package/template/public/Cesium1.119/Widgets/lighter.css +0 -246
- package/template/public/Cesium1.119/Widgets/lighterShared.css +0 -46
- package/template/public/Cesium1.119/Widgets/shared.css +0 -103
- package/template/public/Cesium1.119/Widgets/widgets.css +0 -1376
- package/template/public/Cesium1.119/Workers/chunk-3C7WC463.js +0 -611
- package/template/public/Cesium1.119/Workers/chunk-3JW36LZF.js +0 -166
- package/template/public/Cesium1.119/Workers/chunk-4BTGX3WJ.js +0 -264
- package/template/public/Cesium1.119/Workers/chunk-4WRMLZA7.js +0 -128
- package/template/public/Cesium1.119/Workers/chunk-7Z5IIKOJ.js +0 -8046
- package/template/public/Cesium1.119/Workers/chunk-ABGXSJNX.js +0 -341
- package/template/public/Cesium1.119/Workers/chunk-AMQUWUD4.js +0 -269
- package/template/public/Cesium1.119/Workers/chunk-ATPDRNKI.js +0 -28
- package/template/public/Cesium1.119/Workers/chunk-BMHPVZ4H.js +0 -199
- package/template/public/Cesium1.119/Workers/chunk-CBEO3SHS.js +0 -1102
- package/template/public/Cesium1.119/Workers/chunk-CV7DLCWG.js +0 -485
- package/template/public/Cesium1.119/Workers/chunk-DQO6B4EQ.js +0 -76
- package/template/public/Cesium1.119/Workers/chunk-ED3TLP6D.js +0 -91
- package/template/public/Cesium1.119/Workers/chunk-EFZKO5RU.js +0 -42
- package/template/public/Cesium1.119/Workers/chunk-F5IHREXR.js +0 -2678
- package/template/public/Cesium1.119/Workers/chunk-FKRG4HDY.js +0 -516
- package/template/public/Cesium1.119/Workers/chunk-FYOYUPXG.js +0 -399
- package/template/public/Cesium1.119/Workers/chunk-GFN7NNSJ.js +0 -65
- package/template/public/Cesium1.119/Workers/chunk-HEEMUCG6.js +0 -92
- package/template/public/Cesium1.119/Workers/chunk-HSWA4OEL.js +0 -672
- package/template/public/Cesium1.119/Workers/chunk-IAC5XVZV.js +0 -287
- package/template/public/Cesium1.119/Workers/chunk-II4VNKYR.js +0 -50
- package/template/public/Cesium1.119/Workers/chunk-ILGBPNP6.js +0 -28
- package/template/public/Cesium1.119/Workers/chunk-IRH46BDL.js +0 -124
- package/template/public/Cesium1.119/Workers/chunk-IUA6FAOZ.js +0 -31
- package/template/public/Cesium1.119/Workers/chunk-K4ASOM65.js +0 -331
- package/template/public/Cesium1.119/Workers/chunk-KCIZBVXL.js +0 -258
- package/template/public/Cesium1.119/Workers/chunk-KF5NF354.js +0 -162
- package/template/public/Cesium1.119/Workers/chunk-KRKI6AAO.js +0 -773
- package/template/public/Cesium1.119/Workers/chunk-KZNJOCYU.js +0 -162
- package/template/public/Cesium1.119/Workers/chunk-O5IJ3OGP.js +0 -857
- package/template/public/Cesium1.119/Workers/chunk-OO23RBLX.js +0 -183
- package/template/public/Cesium1.119/Workers/chunk-P37AI2DW.js +0 -85
- package/template/public/Cesium1.119/Workers/chunk-PDMQLSBL.js +0 -108
- package/template/public/Cesium1.119/Workers/chunk-PEYJTJPE.js +0 -73
- package/template/public/Cesium1.119/Workers/chunk-POASMU2N.js +0 -2372
- package/template/public/Cesium1.119/Workers/chunk-PXCJYT2S.js +0 -73
- package/template/public/Cesium1.119/Workers/chunk-Q6L7X3LP.js +0 -538
- package/template/public/Cesium1.119/Workers/chunk-QB3MDM4J.js +0 -1670
- package/template/public/Cesium1.119/Workers/chunk-R6KGAEF6.js +0 -392
- package/template/public/Cesium1.119/Workers/chunk-RXTBM4OI.js +0 -57
- package/template/public/Cesium1.119/Workers/chunk-SB224QGV.js +0 -72
- package/template/public/Cesium1.119/Workers/chunk-T6BE4RZK.js +0 -37
- package/template/public/Cesium1.119/Workers/chunk-TAMCUKAR.js +0 -814
- package/template/public/Cesium1.119/Workers/chunk-TMSETF7M.js +0 -579
- package/template/public/Cesium1.119/Workers/chunk-TOGHF3VN.js +0 -376
- package/template/public/Cesium1.119/Workers/chunk-UH2WFNTA.js +0 -111
- package/template/public/Cesium1.119/Workers/chunk-V7JEDBOE.js +0 -573
- package/template/public/Cesium1.119/Workers/chunk-VBIROZR5.js +0 -633
- package/template/public/Cesium1.119/Workers/chunk-W23CU777.js +0 -271
- package/template/public/Cesium1.119/Workers/chunk-X5IHHI6X.js +0 -173
- package/template/public/Cesium1.119/Workers/chunk-XHX2UPDO.js +0 -217
- package/template/public/Cesium1.119/Workers/combineGeometry.js +0 -53
- package/template/public/Cesium1.119/Workers/createBoxGeometry.js +0 -45
- package/template/public/Cesium1.119/Workers/createBoxOutlineGeometry.js +0 -189
- package/template/public/Cesium1.119/Workers/createCircleGeometry.js +0 -148
- package/template/public/Cesium1.119/Workers/createCircleOutlineGeometry.js +0 -105
- package/template/public/Cesium1.119/Workers/createCoplanarPolygonGeometry.js +0 -293
- package/template/public/Cesium1.119/Workers/createCoplanarPolygonOutlineGeometry.js +0 -143
- package/template/public/Cesium1.119/Workers/createCorridorGeometry.js +0 -830
- package/template/public/Cesium1.119/Workers/createCorridorOutlineGeometry.js +0 -417
- package/template/public/Cesium1.119/Workers/createCylinderGeometry.js +0 -47
- package/template/public/Cesium1.119/Workers/createCylinderOutlineGeometry.js +0 -170
- package/template/public/Cesium1.119/Workers/createEllipseGeometry.js +0 -58
- package/template/public/Cesium1.119/Workers/createEllipseOutlineGeometry.js +0 -51
- package/template/public/Cesium1.119/Workers/createEllipsoidGeometry.js +0 -46
- package/template/public/Cesium1.119/Workers/createEllipsoidOutlineGeometry.js +0 -45
- package/template/public/Cesium1.119/Workers/createFrustumGeometry.js +0 -45
- package/template/public/Cesium1.119/Workers/createFrustumOutlineGeometry.js +0 -164
- package/template/public/Cesium1.119/Workers/createGeometry.js +0 -159
- package/template/public/Cesium1.119/Workers/createGroundPolylineGeometry.js +0 -911
- package/template/public/Cesium1.119/Workers/createPlaneGeometry.js +0 -185
- package/template/public/Cesium1.119/Workers/createPlaneOutlineGeometry.js +0 -93
- package/template/public/Cesium1.119/Workers/createPolygonGeometry.js +0 -884
- package/template/public/Cesium1.119/Workers/createPolygonOutlineGeometry.js +0 -359
- package/template/public/Cesium1.119/Workers/createPolylineGeometry.js +0 -349
- package/template/public/Cesium1.119/Workers/createPolylineVolumeGeometry.js +0 -262
- package/template/public/Cesium1.119/Workers/createPolylineVolumeOutlineGeometry.js +0 -177
- package/template/public/Cesium1.119/Workers/createRectangleGeometry.js +0 -787
- package/template/public/Cesium1.119/Workers/createRectangleOutlineGeometry.js +0 -299
- package/template/public/Cesium1.119/Workers/createSimplePolylineGeometry.js +0 -294
- package/template/public/Cesium1.119/Workers/createSphereGeometry.js +0 -84
- package/template/public/Cesium1.119/Workers/createSphereOutlineGeometry.js +0 -83
- package/template/public/Cesium1.119/Workers/createTaskProcessorWorker.js +0 -28
- package/template/public/Cesium1.119/Workers/createVectorTileClampedPolylines.js +0 -289
- package/template/public/Cesium1.119/Workers/createVectorTileGeometries.js +0 -258
- package/template/public/Cesium1.119/Workers/createVectorTilePoints.js +0 -79
- package/template/public/Cesium1.119/Workers/createVectorTilePolygons.js +0 -275
- package/template/public/Cesium1.119/Workers/createVectorTilePolylines.js +0 -176
- package/template/public/Cesium1.119/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +0 -375
- package/template/public/Cesium1.119/Workers/createVerticesFromHeightmap.js +0 -1772
- package/template/public/Cesium1.119/Workers/createVerticesFromQuantizedTerrainMesh.js +0 -425
- package/template/public/Cesium1.119/Workers/createWallGeometry.js +0 -320
- package/template/public/Cesium1.119/Workers/createWallOutlineGeometry.js +0 -229
- package/template/public/Cesium1.119/Workers/decodeDraco.js +0 -227
- package/template/public/Cesium1.119/Workers/decodeGoogleEarthEnterprisePacket.js +0 -1836
- package/template/public/Cesium1.119/Workers/decodeI3S.js +0 -924
- package/template/public/Cesium1.119/Workers/transcodeKTX2.js +0 -3180
- package/template/public/Cesium1.119/Workers/transferTypedArrayTest.js +0 -34
- package/template/public/Cesium1.119/Workers/upsampleQuantizedTerrainMesh.js +0 -534
- package/template/public/Cesium1.119/index.cjs +0 -185632
- package/template/public/Cesium1.119/index.js +0 -182874
- package/template/src/views/Test/index.vue +0 -56
- package/template/tests/unit/example.test.ts +0 -7
package/lib/scaffold.js
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { spawn } from 'node:child_process';
|
|
4
|
+
import { TEMPLATE_DIR } from './constants.js';
|
|
5
|
+
import { applyGisIntegration, removeGisIntegration } from './gis.js';
|
|
6
|
+
import { writeProjectManifest } from './manifest.js';
|
|
7
|
+
|
|
8
|
+
export async function pathExists(p) {
|
|
9
|
+
try {
|
|
10
|
+
await fs.access(p);
|
|
11
|
+
return true;
|
|
12
|
+
} catch {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async function isDirEmpty(p) {
|
|
18
|
+
try {
|
|
19
|
+
return (await fs.readdir(p)).length === 0;
|
|
20
|
+
} catch {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export async function copyTemplate(destDir, { forceEmpty = false } = {}) {
|
|
26
|
+
if (await pathExists(destDir)) {
|
|
27
|
+
const empty = await isDirEmpty(destDir);
|
|
28
|
+
if (!empty && !forceEmpty) {
|
|
29
|
+
throw new Error('TARGET_NOT_EMPTY');
|
|
30
|
+
}
|
|
31
|
+
await fs.rm(destDir, { recursive: true, force: true });
|
|
32
|
+
}
|
|
33
|
+
await fs.mkdir(destDir, { recursive: true });
|
|
34
|
+
await fs.cp(TEMPLATE_DIR, destDir, { recursive: true });
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export async function updatePackageName(destDir, name) {
|
|
38
|
+
const pkgPath = path.join(destDir, 'package.json');
|
|
39
|
+
const pkg = JSON.parse(await fs.readFile(pkgPath, 'utf8'));
|
|
40
|
+
pkg.name = name;
|
|
41
|
+
await fs.writeFile(pkgPath, JSON.stringify(pkg, null, 2) + '\n', 'utf8');
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export async function updateIndexTitle(destDir, title) {
|
|
45
|
+
const indexPath = path.join(destDir, 'index.html');
|
|
46
|
+
try {
|
|
47
|
+
const html = await fs.readFile(indexPath, 'utf8');
|
|
48
|
+
const next = html.replace(
|
|
49
|
+
/<title>.*?<\/title>/i,
|
|
50
|
+
`<title>${title}</title>`
|
|
51
|
+
);
|
|
52
|
+
await fs.writeFile(indexPath, next, 'utf8');
|
|
53
|
+
} catch {
|
|
54
|
+
// ignore
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export async function runInstall(destDir, pm) {
|
|
59
|
+
const child = spawn(pm, ['install'], { cwd: destDir, stdio: 'inherit' });
|
|
60
|
+
await new Promise((resolve, reject) => {
|
|
61
|
+
child.on('exit', (code) => {
|
|
62
|
+
if (code === 0) resolve();
|
|
63
|
+
else reject(new Error(`${pm} install failed with code ${code}`));
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export async function initGit(destDir) {
|
|
69
|
+
const child = spawn('git', ['init'], { cwd: destDir, stdio: 'inherit' });
|
|
70
|
+
await new Promise((resolve, reject) => {
|
|
71
|
+
child.on('exit', (code) => {
|
|
72
|
+
if (code === 0) resolve();
|
|
73
|
+
else reject(new Error(`git init failed with code ${code}`));
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export async function verifyProject(destDir, pm) {
|
|
79
|
+
const child = spawn(pm, ['run', 'typecheck'], {
|
|
80
|
+
cwd: destDir,
|
|
81
|
+
stdio: 'inherit',
|
|
82
|
+
});
|
|
83
|
+
await new Promise((resolve, reject) => {
|
|
84
|
+
child.on('exit', (code) => {
|
|
85
|
+
if (code === 0) resolve();
|
|
86
|
+
else reject(new Error('Post-scaffold typecheck failed'));
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export async function applyFeatures(destDir, { gis }) {
|
|
92
|
+
if (gis) {
|
|
93
|
+
await applyGisIntegration(destDir);
|
|
94
|
+
} else {
|
|
95
|
+
await removeGisIntegration(destDir);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export async function finalizeProject(destDir, context) {
|
|
100
|
+
await writeProjectManifest(destDir, {
|
|
101
|
+
features: { gis: context.gis },
|
|
102
|
+
packageManager: context.pm,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** 供 CLI 与集成测试复用的创建流程(不含 install / git / verify) */
|
|
107
|
+
export async function createProject(
|
|
108
|
+
destDir,
|
|
109
|
+
{ projectName, gis, pm = 'pnpm' }
|
|
110
|
+
) {
|
|
111
|
+
await copyTemplate(destDir);
|
|
112
|
+
await updatePackageName(destDir, projectName);
|
|
113
|
+
await updateIndexTitle(destDir, projectName);
|
|
114
|
+
await applyFeatures(destDir, { gis });
|
|
115
|
+
await finalizeProject(destDir, { gis, pm });
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export { TEMPLATE_DIR };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-swdg-frontend",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Scaffold a new SWDG frontend project",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -8,11 +8,15 @@
|
|
|
8
8
|
},
|
|
9
9
|
"files": [
|
|
10
10
|
"bin",
|
|
11
|
+
"lib",
|
|
12
|
+
"stubs",
|
|
13
|
+
"scripts",
|
|
11
14
|
"template"
|
|
12
15
|
],
|
|
13
16
|
"scripts": {
|
|
14
17
|
"sync-template": "node scripts/sync-template.js",
|
|
15
|
-
"
|
|
18
|
+
"validate-template": "node scripts/validate-template.mjs",
|
|
19
|
+
"prepublishOnly": "node scripts/sync-template.js && node scripts/validate-template.mjs"
|
|
16
20
|
},
|
|
17
21
|
"engines": {
|
|
18
22
|
"node": ">=18"
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import fs from 'node:fs/promises';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { spawn } from 'node:child_process';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
+
const __dirname = path.dirname(__filename);
|
|
10
|
+
|
|
11
|
+
const DEFAULT_REPO = 'http://10.20.124.70/bim/frontend-framework.git';
|
|
12
|
+
const repo = process.env.TEMPLATE_REPO || DEFAULT_REPO;
|
|
13
|
+
const localSource = process.env.TEMPLATE_DIR;
|
|
14
|
+
const autoLocalSource = path.resolve(__dirname, '../..');
|
|
15
|
+
const branch = process.env.TEMPLATE_BRANCH || 'main';
|
|
16
|
+
const templateDir = path.resolve(__dirname, '../template');
|
|
17
|
+
|
|
18
|
+
const excludes = new Set([
|
|
19
|
+
'.git',
|
|
20
|
+
'node_modules',
|
|
21
|
+
'dist',
|
|
22
|
+
'.DS_Store',
|
|
23
|
+
'.cursor',
|
|
24
|
+
'.vscode',
|
|
25
|
+
'create-swdg',
|
|
26
|
+
'create-frontend-framework',
|
|
27
|
+
'swdg',
|
|
28
|
+
'package-lock.json',
|
|
29
|
+
'pnpm-lock.yaml',
|
|
30
|
+
'openapi-generator-cli.jar',
|
|
31
|
+
'tsconfig.tsbuildinfo',
|
|
32
|
+
'auto-imports.d.ts',
|
|
33
|
+
'components.d.ts',
|
|
34
|
+
'_tmp-swdg-test',
|
|
35
|
+
'my-app',
|
|
36
|
+
'public/Cesium1.119',
|
|
37
|
+
]);
|
|
38
|
+
|
|
39
|
+
function run(cmd, args, options = {}) {
|
|
40
|
+
return new Promise((resolve, reject) => {
|
|
41
|
+
const child = spawn(cmd, args, { stdio: 'inherit', ...options });
|
|
42
|
+
child.on('exit', (code) => {
|
|
43
|
+
if (code === 0) resolve();
|
|
44
|
+
else
|
|
45
|
+
reject(new Error(`${cmd} ${args.join(' ')} failed with code ${code}`));
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async function pathExists(targetPath) {
|
|
51
|
+
try {
|
|
52
|
+
await fs.access(targetPath);
|
|
53
|
+
return true;
|
|
54
|
+
} catch {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async function copyDir(src, dest) {
|
|
60
|
+
const entries = await fs.readdir(src, { withFileTypes: true });
|
|
61
|
+
await fs.mkdir(dest, { recursive: true });
|
|
62
|
+
|
|
63
|
+
for (const entry of entries) {
|
|
64
|
+
if (excludes.has(entry.name)) continue;
|
|
65
|
+
const from = path.join(src, entry.name);
|
|
66
|
+
const to = path.join(dest, entry.name);
|
|
67
|
+
|
|
68
|
+
if (entry.isDirectory()) {
|
|
69
|
+
await copyDir(from, to);
|
|
70
|
+
} else if (entry.isSymbolicLink()) {
|
|
71
|
+
const link = await fs.readlink(from);
|
|
72
|
+
await fs.symlink(link, to);
|
|
73
|
+
} else {
|
|
74
|
+
await fs.copyFile(from, to);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
async function main() {
|
|
80
|
+
const tempRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'swdg-template-'));
|
|
81
|
+
const tempRepo = path.join(tempRoot, 'repo');
|
|
82
|
+
|
|
83
|
+
if (
|
|
84
|
+
localSource ||
|
|
85
|
+
(await pathExists(path.join(autoLocalSource, 'package.json')))
|
|
86
|
+
) {
|
|
87
|
+
const absLocal = localSource ? path.resolve(localSource) : autoLocalSource;
|
|
88
|
+
console.log(`Syncing template from local path: ${absLocal}`);
|
|
89
|
+
await fs.rm(templateDir, { recursive: true, force: true });
|
|
90
|
+
await fs.mkdir(templateDir, { recursive: true });
|
|
91
|
+
await copyDir(absLocal, templateDir);
|
|
92
|
+
console.log('Template synced.');
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
console.log(`Cloning template from ${repo} (${branch})...`);
|
|
97
|
+
await run('git', [
|
|
98
|
+
'clone',
|
|
99
|
+
'--depth',
|
|
100
|
+
'1',
|
|
101
|
+
'--branch',
|
|
102
|
+
branch,
|
|
103
|
+
repo,
|
|
104
|
+
tempRepo,
|
|
105
|
+
]);
|
|
106
|
+
|
|
107
|
+
await fs.rm(templateDir, { recursive: true, force: true });
|
|
108
|
+
await fs.mkdir(templateDir, { recursive: true });
|
|
109
|
+
|
|
110
|
+
console.log('Syncing template...');
|
|
111
|
+
await copyDir(tempRepo, templateDir);
|
|
112
|
+
|
|
113
|
+
await fs.rm(tempRoot, { recursive: true, force: true });
|
|
114
|
+
console.log('Template synced.');
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
main().catch((err) => {
|
|
118
|
+
console.error(err?.message ?? err);
|
|
119
|
+
process.exit(1);
|
|
120
|
+
});
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* 校验 create-swdg/template 可 install / typecheck / build。
|
|
4
|
+
* 在 create-swdg 包内自包含,供 prepublishOnly 与 monorepo test:template 使用。
|
|
5
|
+
*/
|
|
6
|
+
import fs from 'node:fs/promises';
|
|
7
|
+
import path from 'node:path';
|
|
8
|
+
import { spawn } from 'node:child_process';
|
|
9
|
+
import { fileURLToPath } from 'node:url';
|
|
10
|
+
|
|
11
|
+
const packageRoot = path.resolve(
|
|
12
|
+
path.dirname(fileURLToPath(import.meta.url)),
|
|
13
|
+
'..'
|
|
14
|
+
);
|
|
15
|
+
const templateDir = path.join(packageRoot, 'template');
|
|
16
|
+
|
|
17
|
+
function run(cmd, args, cwd, env = process.env) {
|
|
18
|
+
return new Promise((resolve, reject) => {
|
|
19
|
+
const child = spawn(cmd, args, {
|
|
20
|
+
cwd,
|
|
21
|
+
stdio: 'inherit',
|
|
22
|
+
shell: true,
|
|
23
|
+
env,
|
|
24
|
+
});
|
|
25
|
+
child.on('exit', (code) => {
|
|
26
|
+
if (code === 0) resolve();
|
|
27
|
+
else reject(new Error(`${cmd} ${args.join(' ')} exited ${code}`));
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
async function assertTemplateLayout() {
|
|
33
|
+
const required = [
|
|
34
|
+
'package.json',
|
|
35
|
+
'vite.config.ts',
|
|
36
|
+
'src/main.ts',
|
|
37
|
+
'src/router/index.ts',
|
|
38
|
+
'src/views/index.vue',
|
|
39
|
+
'docs/ONBOARDING.md',
|
|
40
|
+
];
|
|
41
|
+
for (const rel of required) {
|
|
42
|
+
try {
|
|
43
|
+
await fs.access(path.join(templateDir, rel));
|
|
44
|
+
} catch {
|
|
45
|
+
throw new Error(`template missing required file: ${rel}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async function main() {
|
|
51
|
+
console.log('\n▶ validate-template\n');
|
|
52
|
+
console.log(` template: ${templateDir}`);
|
|
53
|
+
|
|
54
|
+
await assertTemplateLayout();
|
|
55
|
+
|
|
56
|
+
console.log(' · pnpm install');
|
|
57
|
+
await run('pnpm', ['install'], templateDir);
|
|
58
|
+
|
|
59
|
+
console.log(' · typecheck');
|
|
60
|
+
await run('pnpm', ['run', 'typecheck'], templateDir);
|
|
61
|
+
|
|
62
|
+
console.log(' · production build');
|
|
63
|
+
await run('pnpm', ['run', 'build'], templateDir, {
|
|
64
|
+
...process.env,
|
|
65
|
+
VITE_FEATURE_GIS: 'true',
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
console.log('\n✓ validate-template passed\n');
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
main().catch((err) => {
|
|
72
|
+
console.error(`\n✗ validate-template failed: ${err.message}\n`);
|
|
73
|
+
process.exit(1);
|
|
74
|
+
});
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { defineConfig, loadEnv } from 'vite';
|
|
2
|
+
import vue from '@vitejs/plugin-vue';
|
|
3
|
+
import AutoImport from 'unplugin-auto-import/vite';
|
|
4
|
+
import Components from 'unplugin-vue-components/vite';
|
|
5
|
+
import copyPlugin from 'rollup-plugin-copy';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
|
|
8
|
+
export default defineConfig(({ mode }) => {
|
|
9
|
+
const env = loadEnv(mode, process.cwd(), '');
|
|
10
|
+
|
|
11
|
+
return {
|
|
12
|
+
base: './',
|
|
13
|
+
build: {
|
|
14
|
+
sourcemap: true,
|
|
15
|
+
emptyOutDir: false,
|
|
16
|
+
rollupOptions: {
|
|
17
|
+
plugins: [
|
|
18
|
+
copyPlugin({
|
|
19
|
+
targets: [{ src: 'src/assets/**/*', dest: 'dist/assets' }],
|
|
20
|
+
}),
|
|
21
|
+
],
|
|
22
|
+
},
|
|
23
|
+
outDir: 'dist',
|
|
24
|
+
assetsDir: 'assets',
|
|
25
|
+
},
|
|
26
|
+
plugins: [vue(), AutoImport({}), Components({})],
|
|
27
|
+
resolve: {
|
|
28
|
+
alias: {
|
|
29
|
+
'@': path.resolve(__dirname, './src'),
|
|
30
|
+
'@assets': path.resolve(__dirname, './src/assets'),
|
|
31
|
+
'@style': path.resolve(__dirname, './src/styles'),
|
|
32
|
+
'@stores': path.resolve(__dirname, './src/stores'),
|
|
33
|
+
'@components': path.resolve(__dirname, './src/components'),
|
|
34
|
+
'@utils': path.resolve(__dirname, './src/utils'),
|
|
35
|
+
'@api': path.resolve(__dirname, './src/api'),
|
|
36
|
+
'@types': path.resolve(__dirname, './types'),
|
|
37
|
+
'@views': path.resolve(__dirname, './src/views'),
|
|
38
|
+
'@composables': path.resolve(__dirname, './src/utils/composables'),
|
|
39
|
+
'@router': path.resolve(__dirname, './src/router'),
|
|
40
|
+
'@directive': path.resolve(__dirname, './src/directive'),
|
|
41
|
+
'@layout': path.resolve(__dirname, './src/layout'),
|
|
42
|
+
'@interface': path.resolve(__dirname, './interface'),
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
css: {
|
|
46
|
+
preprocessorOptions: {
|
|
47
|
+
less: {
|
|
48
|
+
javascriptEnabled: true,
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
server: {
|
|
53
|
+
host: '0.0.0.0',
|
|
54
|
+
port: 3000,
|
|
55
|
+
open: true,
|
|
56
|
+
proxy: {
|
|
57
|
+
'/demo': {
|
|
58
|
+
target: env.VITE_DEMO_PROXY_TARGET,
|
|
59
|
+
changeOrigin: true,
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, master]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main, master]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
release-gate:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
timeout-minutes: 30
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v4
|
|
15
|
+
- uses: pnpm/action-setup@v4
|
|
16
|
+
with:
|
|
17
|
+
version: 9
|
|
18
|
+
- uses: actions/setup-node@v4
|
|
19
|
+
with:
|
|
20
|
+
node-version: 22
|
|
21
|
+
cache: pnpm
|
|
22
|
+
- run: pnpm install --frozen-lockfile
|
|
23
|
+
- run: pnpm test:ci
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
name: Release to npm
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v[0-9]+.[0-9]+.[0-9]+'
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
publish:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
timeout-minutes: 45
|
|
15
|
+
steps:
|
|
16
|
+
- name: Checkout
|
|
17
|
+
uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- name: Resolve version from tag
|
|
20
|
+
id: meta
|
|
21
|
+
run: |
|
|
22
|
+
TAG="${GITHUB_REF_NAME}"
|
|
23
|
+
VERSION="${TAG#v}"
|
|
24
|
+
if ! echo "$VERSION" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+$'; then
|
|
25
|
+
echo "Invalid tag: $TAG (expected vX.Y.Z)"
|
|
26
|
+
exit 1
|
|
27
|
+
fi
|
|
28
|
+
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
|
29
|
+
echo "Publishing version: $VERSION"
|
|
30
|
+
|
|
31
|
+
- uses: pnpm/action-setup@v4
|
|
32
|
+
with:
|
|
33
|
+
version: 9
|
|
34
|
+
|
|
35
|
+
- uses: actions/setup-node@v4
|
|
36
|
+
with:
|
|
37
|
+
node-version: 22
|
|
38
|
+
cache: pnpm
|
|
39
|
+
|
|
40
|
+
- name: Align package versions
|
|
41
|
+
run: node scripts/set-release-version.mjs "${{ steps.meta.outputs.version }}"
|
|
42
|
+
|
|
43
|
+
- name: Install dependencies
|
|
44
|
+
run: pnpm install --frozen-lockfile
|
|
45
|
+
|
|
46
|
+
- name: Release test pipeline
|
|
47
|
+
run: pnpm test:ci
|
|
48
|
+
|
|
49
|
+
- uses: actions/setup-node@v4
|
|
50
|
+
with:
|
|
51
|
+
node-version: 22
|
|
52
|
+
registry-url: https://registry.npmjs.org
|
|
53
|
+
|
|
54
|
+
- name: Publish create-swdg-frontend
|
|
55
|
+
working-directory: create-swdg
|
|
56
|
+
run: npm publish --access public
|
|
57
|
+
env:
|
|
58
|
+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
59
|
+
|
|
60
|
+
- name: Publish swdg
|
|
61
|
+
working-directory: swdg
|
|
62
|
+
run: npm publish --access public
|
|
63
|
+
env:
|
|
64
|
+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
65
|
+
|
|
66
|
+
- name: Summary
|
|
67
|
+
run: |
|
|
68
|
+
echo "Published create-swdg-frontend@${{ steps.meta.outputs.version }}"
|
|
69
|
+
echo "Published swdg@${{ steps.meta.outputs.version }}"
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"extends": ["stylelint-config-standard", "stylelint-config-recommended-vue"],
|
|
3
3
|
"rules": {
|
|
4
|
-
"no-empty-source": null
|
|
4
|
+
"no-empty-source": null,
|
|
5
|
+
"selector-class-pattern": [
|
|
6
|
+
"^([a-z][a-z0-9]*(-[a-z0-9]+)*)(__([a-z][a-z0-9]*(-[a-z0-9]+)*))*(-{1,2}([a-z][a-z0-9]*(-[a-z0-9]+)*))*?$",
|
|
7
|
+
{
|
|
8
|
+
"message": "Use kebab-case or BEM (block__element--modifier)"
|
|
9
|
+
}
|
|
10
|
+
]
|
|
5
11
|
}
|
|
6
12
|
}
|
package/template/README.md
CHANGED
|
@@ -1,36 +1,99 @@
|
|
|
1
|
-
# Frontend Framework
|
|
1
|
+
# SWDG Frontend Framework
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
面向团队的 **Vue 3 + TypeScript + Vite** 标准模板与脚手架(`create-swdg`)。
|
|
4
|
+
|
|
5
|
+
设计参考 Google / Meta / Microsoft 内部生成器常见模式:
|
|
6
|
+
|
|
7
|
+
- **薄 CLI、厚模板**:逻辑在模板仓库迭代,CLI 只做拷贝与特性裁剪
|
|
8
|
+
- **Feature flags**:重型能力(GIS)默认关闭,按需 opt-in
|
|
9
|
+
- **示例与业务分离**:`src/views/examples/` 仅 dev 路由,生产自动剔除
|
|
10
|
+
- **可验证**:创建后可跑 `typecheck`;模板发布前 `validate-template`
|
|
11
|
+
- **可追溯**:生成 `.swdg/manifest.json` 记录创建参数
|
|
12
|
+
|
|
13
|
+
## 如何使用本项目
|
|
14
|
+
|
|
15
|
+
**完整说明(环境、路由、接口、GIS、构建)** → **[docs/ONBOARDING.md](docs/ONBOARDING.md)**
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
pnpm install
|
|
19
|
+
cp .env.example .env # 含 VITE_FEATURE_GIS、代理地址
|
|
20
|
+
pnpm dev # http://localhost:3000 ,改 .env 后需重启
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
| 你想做的事 | 怎么做 |
|
|
24
|
+
| ------------ | ---------------------------------------------------------------------- |
|
|
25
|
+
| 跑起来看效果 | 首页 `/#/` → 开发示例卡片 → Cesium / Store 示例 |
|
|
26
|
+
| 加一个新页面 | `src/views/模块名/index.vue` → 自动得到 `/#/模块名` |
|
|
27
|
+
| 调后端接口 | `src/api/` + 开发代理 `/demo` → `VITE_DEMO_PROXY_TARGET` |
|
|
28
|
+
| 开三维地图 | `.env` 设 `VITE_FEATURE_GIS=true`,用 `CesiumViewer` 或 `createViewer` |
|
|
29
|
+
| 提交前检查 | `pnpm verify` |
|
|
30
|
+
|
|
31
|
+
维护模板 / 发 npm → [docs/MAINTAINER.md](docs/MAINTAINER.md) · 测试门禁 → [docs/TESTING.md](docs/TESTING.md)
|
|
32
|
+
|
|
33
|
+
## 创建新项目(脚手架)
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
pnpm create swdg my-app
|
|
37
|
+
# 或
|
|
38
|
+
npx create-swdg-frontend my-app
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
交互会询问:项目名、**是否 GIS(默认否)**、是否安装依赖、是否 Git、是否 typecheck 校验。
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# 非 GIS 项目(推荐多数后台类应用)
|
|
45
|
+
pnpm create swdg my-app --no-gis --install
|
|
46
|
+
|
|
47
|
+
# GIS 项目
|
|
48
|
+
pnpm create swdg my-app --gis --install
|
|
49
|
+
```
|
|
4
50
|
|
|
5
51
|
## 目录结构
|
|
6
52
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
├──
|
|
10
|
-
├──
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
│
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
53
|
+
```
|
|
54
|
+
src/
|
|
55
|
+
├── api/ # 接口
|
|
56
|
+
├── components/ # 公共组件
|
|
57
|
+
├── layout/
|
|
58
|
+
├── router/ # 约定式路由(views 下文件即路由)
|
|
59
|
+
├── stores/
|
|
60
|
+
├── utils/
|
|
61
|
+
├── views/ # 业务页面
|
|
62
|
+
│ └── examples/ # 开发示例(生产构建剔除)
|
|
63
|
+
interface/
|
|
64
|
+
types/
|
|
65
|
+
docs/
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Cesium / GIS(可选特性)
|
|
69
|
+
|
|
70
|
+
启用后包含:`cesium`、`vite-plugin-static-copy`、开发中间件、`/#/examples/cesium`。
|
|
71
|
+
|
|
72
|
+
- 底图:OpenStreetMap(无需 Ion token)
|
|
73
|
+
- 可选:`VITE_CESIUM_ION_ACCESS_TOKEN`
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
import { createViewer } from '@utils/cesium';
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## 维护者与发布
|
|
80
|
+
|
|
81
|
+
见 [docs/MAINTAINER.md](docs/MAINTAINER.md)。
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
pnpm verify # 本地质量门禁
|
|
85
|
+
cd create-swdg && pnpm sync-template # 同步模板
|
|
86
|
+
cd create-swdg && node scripts/validate-template.mjs
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## 脚本
|
|
90
|
+
|
|
91
|
+
| 命令 | 说明 |
|
|
92
|
+
| ---------------- | ------------------------------------ |
|
|
93
|
+
| `pnpm dev` | 开发 |
|
|
94
|
+
| `pnpm build` | 构建 |
|
|
95
|
+
| `pnpm typecheck` | TS 检查 |
|
|
96
|
+
| `pnpm verify` | typecheck + lint(日常) |
|
|
97
|
+
| `pnpm test:ci` | 发布门禁(全量,见 docs/TESTING.md) |
|
|
98
|
+
| `pnpm gen:api` | OpenAPI 生成 |
|
|
99
|
+
| `pnpm release` | 先跑 test:ci,再发布 npm 包 |
|