meno-core 1.0.53 → 1.1.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/.claude/settings.local.json +1 -3
- package/bin/cli.ts +66 -261
- package/build-astro.ts +150 -128
- package/dist/bin/cli.js +42 -185
- package/dist/bin/cli.js.map +2 -2
- package/dist/chunks/chunk-2AR55GYH.js +42 -0
- package/dist/chunks/chunk-2AR55GYH.js.map +7 -0
- package/dist/chunks/{chunk-JGWFTO6P.js → chunk-2IIQK7T3.js} +2624 -1389
- package/dist/chunks/chunk-2IIQK7T3.js.map +7 -0
- package/dist/chunks/chunk-4ZRU52J2.js +169 -0
- package/dist/chunks/chunk-4ZRU52J2.js.map +7 -0
- package/dist/chunks/{chunk-UB44F4Z2.js → chunk-5X4HCN7J.js} +5 -7
- package/dist/chunks/chunk-5X4HCN7J.js.map +7 -0
- package/dist/chunks/{chunk-WQFG7PAH.js → chunk-7CCVOL5M.js} +15 -19
- package/dist/chunks/chunk-7CCVOL5M.js.map +7 -0
- package/dist/chunks/{chunk-YBLHKYFF.js → chunk-AR7LHIFY.js} +8 -2
- package/dist/chunks/chunk-AR7LHIFY.js.map +7 -0
- package/dist/chunks/{chunk-O3NAGJP4.js → chunk-NUP7H7D3.js} +135 -41
- package/dist/chunks/chunk-NUP7H7D3.js.map +7 -0
- package/dist/chunks/{chunk-X754AHS5.js → chunk-QWTQZHG3.js} +194 -90
- package/dist/chunks/chunk-QWTQZHG3.js.map +7 -0
- package/dist/chunks/{chunk-H3GJ4H2U.js → chunk-XTKNX4FW.js} +216 -87
- package/dist/chunks/chunk-XTKNX4FW.js.map +7 -0
- package/dist/chunks/{fs-JGINUXGL.js → fs-G3ANWEFP.js} +2 -2
- package/dist/lib/client/index.js +1003 -475
- package/dist/lib/client/index.js.map +3 -3
- package/dist/lib/server/index.js +14393 -6371
- package/dist/lib/server/index.js.map +4 -4
- package/dist/lib/shared/index.js +342 -101
- package/dist/lib/shared/index.js.map +4 -4
- package/dist/lib/shared/richtext/index.js +1 -1
- package/dist/lib/test-utils/index.js +64 -80
- package/dist/lib/test-utils/index.js.map +2 -2
- package/entries/client-router.tsx +10 -8
- package/lib/client/ClientInitializer.ts +8 -8
- package/lib/client/ErrorBoundary.test.tsx +246 -186
- package/lib/client/ErrorBoundary.tsx +183 -132
- package/lib/client/componentRegistry.test.ts +96 -108
- package/lib/client/componentRegistry.ts +1 -3
- package/lib/client/contexts/ThemeContext.tsx +3 -2
- package/lib/client/core/ComponentBuilder.test.ts +663 -560
- package/lib/client/core/ComponentBuilder.ts +427 -155
- package/lib/client/core/ComponentRenderer.test.tsx +2 -4
- package/lib/client/core/ComponentRenderer.tsx +46 -33
- package/lib/client/core/builders/embedBuilder.ts +242 -54
- package/lib/client/core/builders/linkBuilder.ts +72 -45
- package/lib/client/core/builders/linkNodeBuilder.ts +79 -54
- package/lib/client/core/builders/listBuilder.ts +155 -89
- package/lib/client/core/builders/localeListBuilder.ts +97 -62
- package/lib/client/core/builders/types.ts +5 -5
- package/lib/client/core/cmsTemplateProcessor.ts +8 -9
- package/lib/client/elementRegistry.ts +3 -3
- package/lib/client/fontFamiliesService.test.ts +2 -10
- package/lib/client/fontFamiliesService.ts +3 -3
- package/lib/client/hmr/HMRManager.tsx +47 -30
- package/lib/client/hmrCssReload.ts +49 -14
- package/lib/client/hmrWebSocket.ts +14 -19
- package/lib/client/hooks/useColorVariables.test.ts +21 -21
- package/lib/client/hooks/useColorVariables.ts +23 -18
- package/lib/client/hooks/usePropertyAutocomplete.ts +4 -6
- package/lib/client/hooks/useVariables.ts +6 -4
- package/lib/client/hydration/HydrationUtils.test.ts +24 -25
- package/lib/client/hydration/HydrationUtils.ts +3 -4
- package/lib/client/i18nConfigService.test.ts +2 -7
- package/lib/client/i18nConfigService.ts +2 -2
- package/lib/client/meno-filter/MenoFilter.test.ts +47 -49
- package/lib/client/meno-filter/MenoFilter.ts +14 -15
- package/lib/client/meno-filter/bindings.ts +18 -43
- package/lib/client/meno-filter/init.ts +4 -4
- package/lib/client/meno-filter/renderer.ts +30 -32
- package/lib/client/meno-filter/script.generated.ts +1 -3
- package/lib/client/meno-filter/ui.ts +4 -6
- package/lib/client/meno-filter/updates.ts +18 -23
- package/lib/client/meno-filter/utils.ts +1 -1
- package/lib/client/navigation.test.ts +174 -178
- package/lib/client/navigation.ts +0 -1
- package/lib/client/responsiveStyleResolver.knownTokens.test.ts +71 -0
- package/lib/client/responsiveStyleResolver.test.ts +234 -232
- package/lib/client/responsiveStyleResolver.ts +74 -20
- package/lib/client/routing/RouteLoader.test.ts +24 -25
- package/lib/client/routing/RouteLoader.ts +27 -35
- package/lib/client/routing/Router.tsx +210 -153
- package/lib/client/scripts/ScriptExecutor.test.ts +157 -158
- package/lib/client/scripts/ScriptExecutor.ts +18 -36
- package/lib/client/services/PrefetchService.test.ts +3 -3
- package/lib/client/services/PrefetchService.ts +23 -29
- package/lib/client/styleProcessor.test.ts +9 -9
- package/lib/client/styleProcessor.ts +24 -15
- package/lib/client/styles/StyleInjector.test.ts +122 -115
- package/lib/client/styles/StyleInjector.ts +10 -7
- package/lib/client/styles/UtilityClassCollector.ts +62 -28
- package/lib/client/styles/cspNonce.test.ts +2 -5
- package/lib/client/templateEngine.test.ts +554 -488
- package/lib/client/templateEngine.ts +203 -73
- package/lib/client/theme.test.ts +1 -1
- package/lib/client/theme.ts +0 -1
- package/lib/client/utils/toast.ts +0 -1
- package/lib/server/__integration__/api-routes.test.ts +8 -4
- package/lib/server/__integration__/cms-integration.test.ts +1 -4
- package/lib/server/__integration__/server-lifecycle.test.ts +4 -5
- package/lib/server/__integration__/ssr-rendering.test.ts +47 -37
- package/lib/server/__integration__/static-assets.test.ts +3 -3
- package/lib/server/__integration__/test-helpers.ts +87 -74
- package/lib/server/ab/generateFunctions.ts +12 -10
- package/lib/server/astro/cmsPageEmitter.ts +26 -42
- package/lib/server/astro/componentEmitter.ts +35 -43
- package/lib/server/astro/cssCollector.ts +10 -26
- package/lib/server/astro/nodeToAstro.test.ts +1754 -34
- package/lib/server/astro/nodeToAstro.ts +232 -216
- package/lib/server/astro/normalizeOrphanTemplateProps.test.ts +115 -119
- package/lib/server/astro/normalizeOrphanTemplateProps.ts +11 -18
- package/lib/server/astro/pageEmitter.ts +9 -13
- package/lib/server/astro/tailwindMapper.test.ts +10 -37
- package/lib/server/astro/tailwindMapper.ts +33 -40
- package/lib/server/astro/templateTransformer.ts +17 -20
- package/lib/server/createServer.ts +7 -19
- package/lib/server/cssGenerator.test.ts +35 -44
- package/lib/server/cssGenerator.ts +8 -19
- package/lib/server/fileWatcher.test.ts +164 -13
- package/lib/server/fileWatcher.ts +209 -124
- package/lib/server/index.ts +14 -17
- package/lib/server/jsonLoader.test.ts +39 -2
- package/lib/server/jsonLoader.ts +39 -34
- package/lib/server/middleware/cors.test.ts +21 -21
- package/lib/server/middleware/cors.ts +28 -4
- package/lib/server/middleware/errorHandler.test.ts +7 -5
- package/lib/server/middleware/errorHandler.ts +3 -8
- package/lib/server/middleware/index.ts +0 -1
- package/lib/server/middleware/logger.test.ts +10 -8
- package/lib/server/middleware/logger.ts +17 -29
- package/lib/server/migrateTemplates.ts +3 -3
- package/lib/server/pageCache.test.ts +76 -77
- package/lib/server/pageCache.ts +0 -1
- package/lib/server/projectContext.ts +5 -4
- package/lib/server/providers/fileSystemCMSProvider.test.ts +142 -99
- package/lib/server/providers/fileSystemCMSProvider.ts +62 -38
- package/lib/server/routes/api/cms.test.ts +26 -14
- package/lib/server/routes/api/cms.ts +9 -14
- package/lib/server/routes/api/colors.test.ts +2 -2
- package/lib/server/routes/api/components.ts +31 -35
- package/lib/server/routes/api/config.ts +3 -4
- package/lib/server/routes/api/core-routes.ts +49 -76
- package/lib/server/routes/api/enums.test.ts +2 -2
- package/lib/server/routes/api/functions.ts +9 -17
- package/lib/server/routes/api/index.ts +3 -6
- package/lib/server/routes/api/pages.ts +8 -11
- package/lib/server/routes/api/shared.test.ts +1 -1
- package/lib/server/routes/api/shared.ts +12 -9
- package/lib/server/routes/api/variables.test.ts +3 -5
- package/lib/server/routes/api/variables.ts +1 -1
- package/lib/server/routes/index.ts +25 -28
- package/lib/server/routes/pages.ts +35 -31
- package/lib/server/routes/static.ts +17 -6
- package/lib/server/runtime/bundler.ts +98 -61
- package/lib/server/runtime/fs.ts +16 -26
- package/lib/server/runtime/httpServer.ts +8 -12
- package/lib/server/services/ColorService.test.ts +3 -3
- package/lib/server/services/ColorService.ts +37 -29
- package/lib/server/services/EnumService.test.ts +4 -8
- package/lib/server/services/EnumService.ts +11 -3
- package/lib/server/services/VariableService.test.ts +8 -12
- package/lib/server/services/VariableService.ts +11 -3
- package/lib/server/services/cmsService.test.ts +158 -120
- package/lib/server/services/cmsService.ts +36 -146
- package/lib/server/services/componentService.test.ts +125 -45
- package/lib/server/services/componentService.ts +70 -46
- package/lib/server/services/configService.test.ts +22 -45
- package/lib/server/services/configService.ts +50 -27
- package/lib/server/services/fileWatcherService.ts +42 -8
- package/lib/server/services/index.ts +0 -1
- package/lib/server/services/pageService.test.ts +8 -10
- package/lib/server/services/pageService.ts +32 -18
- package/lib/server/ssr/attributeBuilder.ts +18 -8
- package/lib/server/ssr/buildErrorOverlay.ts +11 -12
- package/lib/server/ssr/clientDataInjector.ts +7 -21
- package/lib/server/ssr/cmsSSRProcessor.ts +4 -8
- package/lib/server/ssr/cssCollector.ts +1 -1
- package/lib/server/ssr/errorOverlay.test.ts +1 -1
- package/lib/server/ssr/errorOverlay.ts +3 -9
- package/lib/server/ssr/htmlGenerator.nonce.test.ts +9 -14
- package/lib/server/ssr/htmlGenerator.test.ts +120 -44
- package/lib/server/ssr/htmlGenerator.ts +126 -91
- package/lib/server/ssr/imageMetadata.test.ts +3 -1
- package/lib/server/ssr/imageMetadata.ts +27 -21
- package/lib/server/ssr/jsCollector.test.ts +8 -18
- package/lib/server/ssr/jsCollector.ts +3 -8
- package/lib/server/ssr/liveReloadIntegration.test.ts +76 -36
- package/lib/server/ssr/metaTagGenerator.ts +2 -2
- package/lib/server/ssr/ssrRenderer.branches.test.ts +1103 -0
- package/lib/server/ssr/ssrRenderer.test.ts +316 -256
- package/lib/server/ssr/ssrRenderer.ts +795 -243
- package/lib/server/ssrRenderer.test.ts +1048 -954
- package/lib/server/utils/jsonLineMapper.test.ts +28 -28
- package/lib/server/utils/jsonLineMapper.ts +7 -7
- package/lib/server/validateStyleCoverage.ts +18 -21
- package/lib/server/websocketManager.ts +28 -19
- package/lib/shared/attributeNodeUtils.test.ts +15 -15
- package/lib/shared/attributeNodeUtils.ts +5 -12
- package/lib/shared/breakpoints.test.ts +5 -5
- package/lib/shared/breakpoints.ts +4 -11
- package/lib/shared/cmsQuery.test.ts +81 -0
- package/lib/shared/cmsQuery.ts +92 -0
- package/lib/shared/cmsQueryParser.test.ts +50 -42
- package/lib/shared/cmsQueryParser.ts +60 -38
- package/lib/shared/colorConversions.ts +9 -9
- package/lib/shared/colorVariableUtils.test.ts +27 -5
- package/lib/shared/colorVariableUtils.ts +21 -12
- package/lib/shared/componentRefs.ts +1 -5
- package/lib/shared/constants.test.ts +3 -3
- package/lib/shared/constants.ts +8 -8
- package/lib/shared/cssGeneration.test.ts +285 -144
- package/lib/shared/cssGeneration.ts +217 -531
- package/lib/shared/cssNamedColors.ts +152 -30
- package/lib/shared/cssProperties.test.ts +69 -70
- package/lib/shared/cssProperties.ts +298 -114
- package/lib/shared/elementClassName.test.ts +109 -109
- package/lib/shared/elementClassName.ts +3 -3
- package/lib/shared/elementUtils.ts +12 -16
- package/lib/shared/errorLogger.test.ts +12 -12
- package/lib/shared/errorLogger.ts +2 -10
- package/lib/shared/errors.test.ts +2 -13
- package/lib/shared/errors.ts +2 -8
- package/lib/shared/expressionEvaluator.test.ts +145 -0
- package/lib/shared/expressionEvaluator.ts +52 -24
- package/lib/shared/fontLoader.test.ts +32 -18
- package/lib/shared/fontLoader.ts +2 -2
- package/lib/shared/friendlyError.ts +2 -3
- package/lib/shared/gradientUtils.test.ts +3 -7
- package/lib/shared/gradientUtils.ts +17 -14
- package/lib/shared/hrefRefs.test.ts +2 -2
- package/lib/shared/hrefRefs.ts +2 -10
- package/lib/shared/i18n.test.ts +4 -4
- package/lib/shared/i18n.ts +18 -38
- package/lib/shared/index.ts +27 -0
- package/lib/shared/inlineSvgStyleRules.ts +14 -13
- package/lib/shared/interactiveStyleMappings.test.ts +32 -54
- package/lib/shared/interactiveStyleMappings.ts +11 -24
- package/lib/shared/interactiveStyles.test.ts +165 -188
- package/lib/shared/interfaces/contentProvider.ts +1 -1
- package/lib/shared/itemTemplateUtils.test.ts +11 -17
- package/lib/shared/itemTemplateUtils.ts +27 -39
- package/lib/shared/jsonRepair.ts +16 -10
- package/lib/shared/libraryLoader.test.ts +21 -55
- package/lib/shared/libraryLoader.ts +7 -22
- package/lib/shared/linkUtils.ts +1 -1
- package/lib/shared/logger.test.ts +66 -0
- package/lib/shared/logger.ts +94 -0
- package/lib/shared/markdown.ts +25 -0
- package/lib/shared/netlifyLocale404.test.ts +179 -0
- package/lib/shared/netlifyLocale404.ts +110 -0
- package/lib/shared/nodeUtils.test.ts +28 -16
- package/lib/shared/nodeUtils.ts +76 -23
- package/lib/shared/pathArrayUtils.test.ts +1 -2
- package/lib/shared/pathArrayUtils.ts +1 -1
- package/lib/shared/pathSecurity.ts +2 -2
- package/lib/shared/pathUtils.test.ts +4 -6
- package/lib/shared/pathUtils.ts +42 -49
- package/lib/shared/paths/Path.test.ts +2 -2
- package/lib/shared/paths/Path.ts +0 -1
- package/lib/shared/paths/PathConverter.test.ts +1 -1
- package/lib/shared/paths/PathConverter.ts +17 -20
- package/lib/shared/paths/PathUtils.ts +13 -13
- package/lib/shared/paths/PathValidator.test.ts +2 -15
- package/lib/shared/paths/PathValidator.ts +12 -10
- package/lib/shared/paths/index.ts +1 -2
- package/lib/shared/permissions.test.ts +168 -0
- package/lib/shared/permissions.ts +162 -0
- package/lib/shared/propResolver.test.ts +240 -244
- package/lib/shared/propResolver.ts +15 -26
- package/lib/shared/pxToRem.test.ts +7 -6
- package/lib/shared/pxToRem.ts +2 -5
- package/lib/shared/registry/BaseNodeTypeRegistry.test.ts +12 -6
- package/lib/shared/registry/ClientRegistry.ts +0 -2
- package/lib/shared/registry/ComponentRegistry.test.ts +46 -32
- package/lib/shared/registry/ComponentRegistry.ts +12 -9
- package/lib/shared/registry/NodeTypeDefinition.ts +16 -9
- package/lib/shared/registry/RegistryManager.ts +1 -2
- package/lib/shared/registry/SSRRegistry.ts +0 -2
- package/lib/shared/registry/createNodeType.ts +7 -9
- package/lib/shared/registry/defineNodeType.ts +2 -6
- package/lib/shared/registry/fieldPresets.ts +3 -1
- package/lib/shared/registry/index.ts +0 -1
- package/lib/shared/registry/nodeTypes/ComponentInstanceNodeType.ts +14 -15
- package/lib/shared/registry/nodeTypes/CustomNodeType.ts +103 -0
- package/lib/shared/registry/nodeTypes/EmbedNodeType.ts +18 -11
- package/lib/shared/registry/nodeTypes/HtmlNodeType.ts +48 -19
- package/lib/shared/registry/nodeTypes/IslandNodeType.ts +129 -0
- package/lib/shared/registry/nodeTypes/LinkNodeType.ts +21 -19
- package/lib/shared/registry/nodeTypes/ListNodeType.ts +117 -77
- package/lib/shared/registry/nodeTypes/LocaleListNodeType.ts +27 -21
- package/lib/shared/registry/nodeTypes/MarkdownNodeType.ts +78 -0
- package/lib/shared/registry/nodeTypes/SlotMarkerType.ts +12 -8
- package/lib/shared/registry/nodeTypes/index.ts +26 -3
- package/lib/shared/responsiveScaling.test.ts +16 -34
- package/lib/shared/responsiveScaling.ts +61 -42
- package/lib/shared/responsiveStyleUtils.test.ts +0 -1
- package/lib/shared/responsiveStyleUtils.ts +11 -13
- package/lib/shared/richtext/htmlToTiptap.test.ts +139 -130
- package/lib/shared/richtext/htmlToTiptap.ts +2 -4
- package/lib/shared/richtext/tiptapToHtml.test.ts +5 -6
- package/lib/shared/richtext/types.ts +1 -8
- package/lib/shared/slugTranslator.test.ts +13 -13
- package/lib/shared/slugTranslator.ts +12 -16
- package/lib/shared/slugify.ts +9 -15
- package/lib/shared/styleNodeUtils.test.ts +8 -8
- package/lib/shared/styleNodeUtils.ts +18 -20
- package/lib/shared/styleUtils.test.ts +87 -61
- package/lib/shared/styleUtils.ts +5 -6
- package/lib/shared/themeDefaults.test.ts +11 -14
- package/lib/shared/themeDefaults.ts +3 -4
- package/lib/shared/tree/PathBuilder.test.ts +63 -145
- package/lib/shared/tree/PathBuilder.ts +59 -47
- package/lib/shared/treePathUtils.test.ts +51 -12
- package/lib/shared/treePathUtils.ts +91 -60
- package/lib/shared/types/api.ts +105 -8
- package/lib/shared/types/cms.test.ts +34 -0
- package/lib/shared/types/cms.ts +90 -34
- package/lib/shared/types/comment.ts +49 -16
- package/lib/shared/types/components.ts +51 -25
- package/lib/shared/types/errors.test.ts +1 -6
- package/lib/shared/types/errors.ts +3 -7
- package/lib/shared/types/experiments.ts +28 -28
- package/lib/shared/types/index.ts +25 -2
- package/lib/shared/types/permissions.ts +139 -0
- package/lib/shared/types/styles.ts +0 -1
- package/lib/shared/types/variables.test.ts +4 -13
- package/lib/shared/types/variables.ts +51 -30
- package/lib/shared/types.ts +1 -2
- package/lib/shared/utilityClassConfig.ts +751 -321
- package/lib/shared/utilityClassMapper.durability.test.ts +117 -0
- package/lib/shared/utilityClassMapper.test.ts +433 -95
- package/lib/shared/utilityClassMapper.ts +322 -249
- package/lib/shared/utilityClassNames.test.ts +38 -0
- package/lib/shared/utilityClassNames.ts +458 -0
- package/lib/shared/utils.test.ts +2 -10
- package/lib/shared/utils.ts +19 -10
- package/lib/shared/validation/cmsValidators.ts +2 -1
- package/lib/shared/validation/commentValidators.test.ts +53 -0
- package/lib/shared/validation/commentValidators.ts +12 -1
- package/lib/shared/validation/index.ts +1 -0
- package/lib/shared/validation/permissionsValidators.test.ts +49 -0
- package/lib/shared/validation/permissionsValidators.ts +49 -0
- package/lib/shared/validation/propValidator.test.ts +19 -21
- package/lib/shared/validation/propValidator.ts +13 -18
- package/lib/shared/validation/schemas.test.ts +64 -32
- package/lib/shared/validation/schemas.ts +616 -345
- package/lib/shared/validation/validators.test.ts +3 -8
- package/lib/shared/validation/validators.ts +89 -68
- package/lib/shared/viewportUnits.integration.test.ts +14 -10
- package/lib/shared/viewportUnits.test.ts +24 -23
- package/lib/shared/viewportUnits.ts +12 -5
- package/lib/test-utils/dom-setup.ts +1 -1
- package/lib/test-utils/factories/ConsoleMockFactory.ts +10 -14
- package/lib/test-utils/factories/DomMockFactory.ts +17 -23
- package/lib/test-utils/factories/EventMockFactory.ts +7 -13
- package/lib/test-utils/factories/FetchMockFactory.ts +39 -57
- package/lib/test-utils/factories/ServerMockFactory.ts +6 -10
- package/lib/test-utils/factories/StoreMockFactory.ts +18 -29
- package/lib/test-utils/fixtures.ts +45 -45
- package/lib/test-utils/helpers/asyncHelpers.test.ts +15 -18
- package/lib/test-utils/helpers/asyncHelpers.ts +11 -20
- package/lib/test-utils/helpers.ts +1 -5
- package/lib/test-utils/index.ts +0 -4
- package/lib/test-utils/mockFactories.ts +13 -19
- package/lib/test-utils/mocks.ts +6 -4
- package/package.json +3 -5
- package/scripts/build-for-publish.mjs +2 -4
- package/scripts/build-meno-filter.ts +4 -7
- package/tsconfig.json +1 -0
- package/vite.config.ts +4 -4
- package/build-next.ts +0 -1361
- package/build-static.test.ts +0 -424
- package/build-static.ts +0 -1074
- package/dist/build-static.js +0 -36
- package/dist/chunks/chunk-2MHDV5BF.js +0 -251
- package/dist/chunks/chunk-2MHDV5BF.js.map +0 -7
- package/dist/chunks/chunk-AZQYF6KE.js +0 -559
- package/dist/chunks/chunk-AZQYF6KE.js.map +0 -7
- package/dist/chunks/chunk-GZHGVVW3.js +0 -322
- package/dist/chunks/chunk-GZHGVVW3.js.map +0 -7
- package/dist/chunks/chunk-H3GJ4H2U.js.map +0 -7
- package/dist/chunks/chunk-I7YIGZXT.js +0 -467
- package/dist/chunks/chunk-I7YIGZXT.js.map +0 -7
- package/dist/chunks/chunk-IGYR22T6.js +0 -6192
- package/dist/chunks/chunk-IGYR22T6.js.map +0 -7
- package/dist/chunks/chunk-JGP5A3Y5.js +0 -1136
- package/dist/chunks/chunk-JGP5A3Y5.js.map +0 -7
- package/dist/chunks/chunk-JGWFTO6P.js.map +0 -7
- package/dist/chunks/chunk-O3NAGJP4.js.map +0 -7
- package/dist/chunks/chunk-QB2LNO4W.js +0 -77
- package/dist/chunks/chunk-QB2LNO4W.js.map +0 -7
- package/dist/chunks/chunk-R6XHAFBF.js +0 -3821
- package/dist/chunks/chunk-R6XHAFBF.js.map +0 -7
- package/dist/chunks/chunk-UB44F4Z2.js.map +0 -7
- package/dist/chunks/chunk-WQFG7PAH.js.map +0 -7
- package/dist/chunks/chunk-X754AHS5.js.map +0 -7
- package/dist/chunks/chunk-YBLHKYFF.js.map +0 -7
- package/dist/chunks/configService-R3OGU2UD.js +0 -13
- package/dist/chunks/configService-R3OGU2UD.js.map +0 -7
- package/dist/chunks/constants-STK2YBIW.js +0 -46
- package/dist/chunks/constants-STK2YBIW.js.map +0 -7
- package/dist/chunks/fs-JGINUXGL.js.map +0 -7
- package/dist/entries/server-router.js +0 -67
- package/dist/entries/server-router.js.map +0 -7
- package/entries/server-router.tsx +0 -81
- package/lib/server/providers/fileSystemPageProvider.ts +0 -160
- package/lib/server/webflow/buildWebflow.ts +0 -635
- package/lib/server/webflow/index.ts +0 -23
- package/lib/server/webflow/nodeToWebflow.test.ts +0 -3170
- package/lib/server/webflow/nodeToWebflow.ts +0 -2435
- package/lib/server/webflow/styleMapper.test.ts +0 -389
- package/lib/server/webflow/styleMapper.ts +0 -695
- package/lib/server/webflow/templateWrapper.ts +0 -49
- package/lib/server/webflow/types.ts +0 -396
- /package/dist/{build-static.js.map → chunks/fs-G3ANWEFP.js.map} +0 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission Types
|
|
3
|
+
*
|
|
4
|
+
* Per-resource, soft (UI-coordination) edit permissions keyed by GitHub
|
|
5
|
+
* identity. The policy lives in `.meno/permissions.json` at the project root
|
|
6
|
+
* (committed, so every clone resolves the SAME policy locally). GitHub stays
|
|
7
|
+
* the identity + grouping authority (logins, teams, repo-admin bit); this model
|
|
8
|
+
* owns what those map to in editor terms.
|
|
9
|
+
*
|
|
10
|
+
* Enforcement tier is SOFT: these types drive UI gating (read-only editor
|
|
11
|
+
* paths, disabled save), not an adversarial security boundary — a user with the
|
|
12
|
+
* clone can always edit files directly. Hard enforcement (a CI check on PRs)
|
|
13
|
+
* is a later, additive layer that reads the same policy file.
|
|
14
|
+
*
|
|
15
|
+
* This module is pure data + types; the resolver lives in `../permissions.ts`.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/** Permission tiers, lowest → highest capability. */
|
|
19
|
+
export type PermissionRole = 'viewer' | 'editor' | 'admin';
|
|
20
|
+
|
|
21
|
+
export const PERMISSION_ROLES = ['viewer', 'editor', 'admin'] as const satisfies readonly PermissionRole[];
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* The editable unit kinds of a Meno project. Mirrors the on-disk layout:
|
|
25
|
+
* - `page` → `src/pages/<slug>.astro` (id = page slug, e.g. `blog/post`)
|
|
26
|
+
* - `component` → `src/components/<Name>.astro` (id = component name)
|
|
27
|
+
* - `cms` → `src/content/<collectionId>/` (id = collection id; items inherit)
|
|
28
|
+
* - `config` → root config files (id = a {@link ConfigArea})
|
|
29
|
+
*/
|
|
30
|
+
export type ResourceKind = 'page' | 'component' | 'cms' | 'config';
|
|
31
|
+
|
|
32
|
+
export const RESOURCE_KINDS: readonly ResourceKind[] = ['page', 'component', 'cms', 'config'] as const;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Named global-config capabilities (the `config` resource kind's id namespace):
|
|
36
|
+
* - `project` → `project.config.json` (site URL, breakpoints, fonts, …)
|
|
37
|
+
* - `colors` → `colors.json`
|
|
38
|
+
* - `variables` → `variables.json`
|
|
39
|
+
* - `i18n` → locale config inside `project.config.json`
|
|
40
|
+
*
|
|
41
|
+
* NOTE: `i18n` lives *inside* `project.config.json`, so the CI checker (which
|
|
42
|
+
* maps whole files) enforces it at `project` granularity — granting `i18n`
|
|
43
|
+
* without `project` is advisory only (no file maps to it on its own), and
|
|
44
|
+
* granting `project` implies `i18n`.
|
|
45
|
+
*/
|
|
46
|
+
export type ConfigArea = 'project' | 'colors' | 'variables' | 'i18n';
|
|
47
|
+
|
|
48
|
+
export const CONFIG_AREAS: readonly ConfigArea[] = ['project', 'colors', 'variables', 'i18n'] as const;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* A reference to one editable resource, checked against a {@link PermissionRule}.
|
|
52
|
+
* `id` is matched against the rule's glob list for `kind` (see
|
|
53
|
+
* `matchesPermissionPattern`).
|
|
54
|
+
*/
|
|
55
|
+
export interface ResourceRef {
|
|
56
|
+
kind: ResourceKind;
|
|
57
|
+
/** page slug | component name | collection id | config area. */
|
|
58
|
+
id: string;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Per-resource-kind allow-lists. Each entry is a glob pattern (`*` matches any
|
|
63
|
+
* run of characters, including `/`) matched against a {@link ResourceRef.id}.
|
|
64
|
+
* Only consulted for the `editor` role — `viewer` edits nothing, `admin`
|
|
65
|
+
* edits everything. An absent/empty list for a kind means "no resources of
|
|
66
|
+
* that kind".
|
|
67
|
+
*/
|
|
68
|
+
export interface PermissionRule {
|
|
69
|
+
/** Page slugs, e.g. `["blog/*", "about"]`. */
|
|
70
|
+
pages?: string[];
|
|
71
|
+
/** Component names, e.g. `["Card", "*Hero"]`. */
|
|
72
|
+
components?: string[];
|
|
73
|
+
/** CMS collection ids, e.g. `["posts", "*"]`. */
|
|
74
|
+
cms?: string[];
|
|
75
|
+
/** Config areas, e.g. `["colors", "variables"]` or `["*"]`. */
|
|
76
|
+
config?: string[];
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* One person's or team's grant. `role` defaults to `editor` when `allow` is
|
|
81
|
+
* present, otherwise `viewer`.
|
|
82
|
+
*/
|
|
83
|
+
export interface PermissionGrant {
|
|
84
|
+
role?: PermissionRole;
|
|
85
|
+
/** Editable resources — only meaningful for the `editor` role. */
|
|
86
|
+
allow?: PermissionRule;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** Current `version` value written by this app. */
|
|
90
|
+
export const CURRENT_PERMISSIONS_VERSION = 1;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* The committed `.meno/permissions.json` document. Logins/team slugs are
|
|
94
|
+
* matched case-insensitively (GitHub logins are case-insensitive).
|
|
95
|
+
*/
|
|
96
|
+
export interface PermissionsPolicy {
|
|
97
|
+
/** Schema version. {@link CURRENT_PERMISSIONS_VERSION} for documents this app writes. */
|
|
98
|
+
version: number;
|
|
99
|
+
/** Role for authenticated users not listed in `members`/`teams`. Defaults to `viewer`. */
|
|
100
|
+
defaultRole?: PermissionRole;
|
|
101
|
+
/** Per-GitHub-login grants. */
|
|
102
|
+
members?: Record<string, PermissionGrant>;
|
|
103
|
+
/** Per-GitHub-team-slug grants (a user's grants are the union over their teams). */
|
|
104
|
+
teams?: Record<string, PermissionGrant>;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Who is asking, resolved from the GitHub session. `login: null` means
|
|
109
|
+
* unauthenticated / no GitHub identity (a local project, or a non-electron
|
|
110
|
+
* run) — see {@link PermissionsPolicy} handling in the resolver.
|
|
111
|
+
*/
|
|
112
|
+
export interface PermissionIdentity {
|
|
113
|
+
/** GitHub login, or `null` when unauthenticated. */
|
|
114
|
+
login: string | null;
|
|
115
|
+
/** GitHub team slugs the user belongs to (for `teams` grants). */
|
|
116
|
+
teams?: string[];
|
|
117
|
+
/**
|
|
118
|
+
* GitHub repo `permissions.admin`. Repo admins are ALWAYS treated as admin
|
|
119
|
+
* here (bootstrap safety — a policy can't lock the repo owner out).
|
|
120
|
+
*/
|
|
121
|
+
isRepoAdmin?: boolean;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* The resolved capability set for one identity against one policy. Plain,
|
|
126
|
+
* serializable data (no methods) so it can live in a store; query it with
|
|
127
|
+
* `canEdit()` from `../permissions.ts`.
|
|
128
|
+
*/
|
|
129
|
+
export interface ResolvedPermissions {
|
|
130
|
+
login: string | null;
|
|
131
|
+
/** Effective top role after merging member + team grants (and repo-admin). */
|
|
132
|
+
role: PermissionRole;
|
|
133
|
+
/** `true` for `admin` role or a GitHub repo admin. Admins edit everything. */
|
|
134
|
+
isAdmin: boolean;
|
|
135
|
+
/** May the user edit `.meno/permissions.json` itself? Admins only. */
|
|
136
|
+
canManagePolicy: boolean;
|
|
137
|
+
/** Merged allow-lists from all matching grants (consulted for the `editor` role). */
|
|
138
|
+
allow: Required<PermissionRule>;
|
|
139
|
+
}
|
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
import { describe, expect, it } from 'bun:test';
|
|
2
|
-
import {
|
|
3
|
-
getGroupAbbreviation,
|
|
4
|
-
getDefaultScalingType,
|
|
5
|
-
generateShortCssVar,
|
|
6
|
-
VARIABLE_TYPES,
|
|
7
|
-
} from './variables';
|
|
2
|
+
import { getGroupAbbreviation, getDefaultScalingType, generateShortCssVar, VARIABLE_TYPES } from './variables';
|
|
8
3
|
import type { CSSVariable } from './variables';
|
|
9
4
|
|
|
10
5
|
describe('VARIABLE_TYPES', () => {
|
|
11
6
|
it('has all expected scaling types', () => {
|
|
12
|
-
const values = VARIABLE_TYPES.map(t => t.value);
|
|
7
|
+
const values = VARIABLE_TYPES.map((t) => t.value);
|
|
13
8
|
expect(values).toEqual(['fontSize', 'padding', 'margin', 'gap', 'borderRadius', 'size', 'none']);
|
|
14
9
|
});
|
|
15
10
|
});
|
|
@@ -97,9 +92,7 @@ describe('generateShortCssVar', () => {
|
|
|
97
92
|
});
|
|
98
93
|
|
|
99
94
|
it('extends prefix on collision', () => {
|
|
100
|
-
const existing: CSSVariable[] = [
|
|
101
|
-
{ name: 'H', cssVar: '--h-ls', value: '1px', type: 'none' },
|
|
102
|
-
];
|
|
95
|
+
const existing: CSSVariable[] = [{ name: 'H', cssVar: '--h-ls', value: '1px', type: 'none' }];
|
|
103
96
|
const result = generateShortCssVar('Heading', 'letter-spacing', existing);
|
|
104
97
|
expect(result).toBe('--he-ls');
|
|
105
98
|
});
|
|
@@ -130,9 +123,7 @@ describe('generateShortCssVar', () => {
|
|
|
130
123
|
});
|
|
131
124
|
|
|
132
125
|
it('adds numeric suffix for no-group collisions', () => {
|
|
133
|
-
const existing: CSSVariable[] = [
|
|
134
|
-
{ name: '', cssVar: '--my-var', value: '1px', type: 'none' },
|
|
135
|
-
];
|
|
126
|
+
const existing: CSSVariable[] = [{ name: '', cssVar: '--my-var', value: '1px', type: 'none' }];
|
|
136
127
|
const result = generateShortCssVar('My Var', '', existing);
|
|
137
128
|
expect(result).toBe('--my-var-2');
|
|
138
129
|
});
|
|
@@ -15,18 +15,25 @@ export type VariableType = 'fontSize' | 'padding' | 'margin' | 'gap' | 'borderRa
|
|
|
15
15
|
* Controls which variables appear in the picker based on the CSS property being edited.
|
|
16
16
|
*/
|
|
17
17
|
export type VariableGroup =
|
|
18
|
-
| 'font-family'
|
|
19
|
-
| '
|
|
20
|
-
| '
|
|
18
|
+
| 'font-family'
|
|
19
|
+
| 'font-size'
|
|
20
|
+
| 'font-weight'
|
|
21
|
+
| 'line-height'
|
|
22
|
+
| 'letter-spacing'
|
|
23
|
+
| 'margin'
|
|
24
|
+
| 'padding'
|
|
25
|
+
| 'gap'
|
|
21
26
|
| 'size'
|
|
22
27
|
| 'position'
|
|
23
|
-
| 'border-radius'
|
|
28
|
+
| 'border-radius'
|
|
29
|
+
| 'border-width'
|
|
24
30
|
| 'outline'
|
|
25
31
|
| 'shadow'
|
|
26
32
|
| 'filter'
|
|
27
33
|
| 'duration'
|
|
28
34
|
| 'aspect-ratio'
|
|
29
|
-
| 'opacity'
|
|
35
|
+
| 'opacity'
|
|
36
|
+
| 'z-index'
|
|
30
37
|
| 'text-align'
|
|
31
38
|
| 'other';
|
|
32
39
|
|
|
@@ -56,7 +63,7 @@ export const VARIABLE_GROUPS: { value: VariableGroup; label: string }[] = [
|
|
|
56
63
|
];
|
|
57
64
|
|
|
58
65
|
/** All valid group string values */
|
|
59
|
-
export const VARIABLE_GROUP_VALUES: VariableGroup[] = VARIABLE_GROUPS.map(g => g.value);
|
|
66
|
+
export const VARIABLE_GROUP_VALUES: VariableGroup[] = VARIABLE_GROUPS.map((g) => g.value);
|
|
60
67
|
|
|
61
68
|
/** Maps CSS property names to variable groups */
|
|
62
69
|
const CSS_PROPERTY_TO_GROUP: Record<string, VariableGroup> = {
|
|
@@ -66,13 +73,13 @@ const CSS_PROPERTY_TO_GROUP: Record<string, VariableGroup> = {
|
|
|
66
73
|
'line-height': 'line-height',
|
|
67
74
|
'letter-spacing': 'letter-spacing',
|
|
68
75
|
'text-align': 'text-align',
|
|
69
|
-
|
|
76
|
+
opacity: 'opacity',
|
|
70
77
|
'z-index': 'z-index',
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
78
|
+
top: 'position',
|
|
79
|
+
right: 'position',
|
|
80
|
+
bottom: 'position',
|
|
81
|
+
left: 'position',
|
|
82
|
+
inset: 'position',
|
|
76
83
|
'inset-block': 'position',
|
|
77
84
|
'inset-inline': 'position',
|
|
78
85
|
'inset-block-start': 'position',
|
|
@@ -81,7 +88,7 @@ const CSS_PROPERTY_TO_GROUP: Record<string, VariableGroup> = {
|
|
|
81
88
|
'inset-inline-end': 'position',
|
|
82
89
|
'box-shadow': 'shadow',
|
|
83
90
|
'text-shadow': 'shadow',
|
|
84
|
-
|
|
91
|
+
filter: 'filter',
|
|
85
92
|
'backdrop-filter': 'filter',
|
|
86
93
|
'aspect-ratio': 'aspect-ratio',
|
|
87
94
|
'transition-duration': 'duration',
|
|
@@ -123,15 +130,15 @@ const CSS_PROPERTY_PREFIX_GROUPS: { prefix: string; group: VariableGroup }[] = [
|
|
|
123
130
|
*/
|
|
124
131
|
export function getGroupForProperty(prop: string): VariableGroup | null {
|
|
125
132
|
// Normalize camelCase to kebab-case (e.g., "fontFamily" → "font-family")
|
|
126
|
-
const normalized = prop.replace(/[A-Z]/g, letter => `-${letter.toLowerCase()}`);
|
|
133
|
+
const normalized = prop.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);
|
|
127
134
|
|
|
128
135
|
// Exact match first
|
|
129
136
|
if (normalized in CSS_PROPERTY_TO_GROUP) {
|
|
130
|
-
return CSS_PROPERTY_TO_GROUP[normalized];
|
|
137
|
+
return CSS_PROPERTY_TO_GROUP[normalized] ?? null;
|
|
131
138
|
}
|
|
132
139
|
// Prefix-based match (handles margin-top, padding-left, etc.)
|
|
133
140
|
for (const { prefix, group } of CSS_PROPERTY_PREFIX_GROUPS) {
|
|
134
|
-
if (normalized === prefix || normalized.startsWith(prefix
|
|
141
|
+
if (normalized === prefix || normalized.startsWith(`${prefix}-`)) {
|
|
135
142
|
return group;
|
|
136
143
|
}
|
|
137
144
|
}
|
|
@@ -177,20 +184,23 @@ export const VARIABLE_TYPES: { value: VariableType; label: string }[] = [
|
|
|
177
184
|
];
|
|
178
185
|
|
|
179
186
|
/** All valid variable scaling type values */
|
|
180
|
-
export const VARIABLE_TYPE_VALUES: VariableType[] = VARIABLE_TYPES.map(t => t.value);
|
|
187
|
+
export const VARIABLE_TYPE_VALUES: VariableType[] = VARIABLE_TYPES.map((t) => t.value);
|
|
181
188
|
|
|
182
189
|
/**
|
|
183
190
|
* Returns an abbreviation for a variable group by taking the first letter of each word.
|
|
184
191
|
* e.g. 'letter-spacing' -> 'ls', 'font-size' -> 'fs', 'spacing' -> 's'
|
|
185
192
|
*/
|
|
186
193
|
export function getGroupAbbreviation(group: string): string {
|
|
187
|
-
return group
|
|
194
|
+
return group
|
|
195
|
+
.split('-')
|
|
196
|
+
.map((w) => w[0] || '')
|
|
197
|
+
.join('');
|
|
188
198
|
}
|
|
189
199
|
|
|
190
200
|
/**
|
|
191
201
|
* Infers a default scaling type from a variable group and optional CSS property.
|
|
192
202
|
*/
|
|
193
|
-
export function getDefaultScalingType(group: string,
|
|
203
|
+
export function getDefaultScalingType(group: string, _cssProperty?: string): VariableType {
|
|
194
204
|
if (group === 'font-size') return 'fontSize';
|
|
195
205
|
if (group === 'margin') return 'margin';
|
|
196
206
|
if (group === 'padding') return 'padding';
|
|
@@ -205,34 +215,45 @@ export function getDefaultScalingType(group: string, cssProperty?: string): Vari
|
|
|
205
215
|
* e.g. name="Heading", group="letter-spacing" -> "--h-ls"
|
|
206
216
|
* If taken, extends prefix: "--he-ls", "--hea-ls", etc.
|
|
207
217
|
*/
|
|
208
|
-
export function generateShortCssVar(
|
|
209
|
-
name: string,
|
|
210
|
-
group: string,
|
|
211
|
-
existingVariables: CSSVariable[]
|
|
212
|
-
): string {
|
|
218
|
+
export function generateShortCssVar(name: string, group: string, existingVariables: CSSVariable[]): string {
|
|
213
219
|
const trimmed = name.trim();
|
|
214
220
|
if (!trimmed) return '--';
|
|
215
221
|
if (!group) {
|
|
216
222
|
// No group: just kebab-case the name
|
|
217
|
-
const base =
|
|
223
|
+
const base =
|
|
224
|
+
'--' +
|
|
225
|
+
trimmed
|
|
226
|
+
.toLowerCase()
|
|
227
|
+
.replace(/\s+/g, '-')
|
|
228
|
+
.replace(/[^a-z0-9-]/g, '');
|
|
218
229
|
return ensureUnique(base, existingVariables);
|
|
219
230
|
}
|
|
220
231
|
|
|
221
232
|
const groupAbbr = getGroupAbbreviation(group);
|
|
222
|
-
const kebabName = trimmed
|
|
233
|
+
const kebabName = trimmed
|
|
234
|
+
.toLowerCase()
|
|
235
|
+
.replace(/\s+/g, '-')
|
|
236
|
+
.replace(/[^a-z0-9-]/g, '');
|
|
223
237
|
const words = kebabName.split('-').filter(Boolean);
|
|
224
|
-
const existingNames = new Set(existingVariables.map(v => v.cssVar));
|
|
238
|
+
const existingNames = new Set(existingVariables.map((v) => v.cssVar));
|
|
225
239
|
|
|
226
240
|
// Try progressively longer prefixes from the name
|
|
227
241
|
// Start with first letter of each word, then extend first word
|
|
228
|
-
const initials = words.map(w => w[0] || '').join('');
|
|
242
|
+
const initials = words.map((w) => w[0] || '').join('');
|
|
229
243
|
const initialCandidate = `--${initials}-${groupAbbr}`;
|
|
230
244
|
if (!existingNames.has(initialCandidate)) return initialCandidate;
|
|
231
245
|
|
|
232
246
|
// Extend first word progressively
|
|
233
247
|
const firstWord = words[0] || '';
|
|
234
248
|
for (let len = 2; len <= firstWord.length; len++) {
|
|
235
|
-
const prefix =
|
|
249
|
+
const prefix =
|
|
250
|
+
firstWord.slice(0, len) +
|
|
251
|
+
(words.length > 1
|
|
252
|
+
? words
|
|
253
|
+
.slice(1)
|
|
254
|
+
.map((w) => w[0] || '')
|
|
255
|
+
.join('')
|
|
256
|
+
: '');
|
|
236
257
|
const candidate = `--${prefix}-${groupAbbr}`;
|
|
237
258
|
if (!existingNames.has(candidate)) return candidate;
|
|
238
259
|
}
|
|
@@ -248,7 +269,7 @@ export function generateShortCssVar(
|
|
|
248
269
|
}
|
|
249
270
|
|
|
250
271
|
function ensureUnique(base: string, existingVariables: CSSVariable[]): string {
|
|
251
|
-
const existingNames = new Set(existingVariables.map(v => v.cssVar));
|
|
272
|
+
const existingNames = new Set(existingVariables.map((v) => v.cssVar));
|
|
252
273
|
if (!existingNames.has(base)) return base;
|
|
253
274
|
let i = 2;
|
|
254
275
|
while (existingNames.has(`${base}-${i}`)) i++;
|
package/lib/shared/types.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared TypeScript types and interfaces
|
|
3
3
|
* Used by both client and server code
|
|
4
|
-
*
|
|
4
|
+
*
|
|
5
5
|
* This file maintains backward compatibility while using the new modular type system.
|
|
6
6
|
* All types are re-exported from the organized type modules.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
// Re-export all types from the new modular structure
|
|
10
10
|
export * from './types/index';
|
|
11
|
-
|