From 7e64f27955d86554a80e51eaf58e8f32b44a6a0e Mon Sep 17 00:00:00 2001 From: Ryan Haskell-Glatz Date: Sun, 2 May 2021 09:54:52 -0500 Subject: [PATCH] fix issue with Msg(..) exported on pages --- src/cli/package-lock.json | 4 ++-- src/cli/package.json | 2 +- src/cli/src/templates/utils.ts | 4 ++-- src/cli/tests/templates/utils.spec.ts | 24 +++++++++++++++++++++++- 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/cli/package-lock.json b/src/cli/package-lock.json index 49b5ac4..7a72340 100644 --- a/src/cli/package-lock.json +++ b/src/cli/package-lock.json @@ -1,12 +1,12 @@ { "name": "elm-spa", - "version": "6.0.0", + "version": "6.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "elm-spa", - "version": "6.0.0", + "version": "6.0.1", "license": "BSD-3-Clause", "dependencies": { "chokidar": "3.4.2", diff --git a/src/cli/package.json b/src/cli/package.json index dc7c935..caaf51e 100644 --- a/src/cli/package.json +++ b/src/cli/package.json @@ -1,6 +1,6 @@ { "name": "elm-spa", - "version": "6.0.0", + "version": "6.0.1", "description": "single page apps made easy", "bin": "dist/src/index.js", "scripts": { diff --git a/src/cli/src/templates/utils.ts b/src/cli/src/templates/utils.ts index 5c254e5..f7c0e07 100644 --- a/src/cli/src/templates/utils.ts +++ b/src/cli/src/templates/utils.ts @@ -317,7 +317,7 @@ const pageModelArguments = (path: string[], options : Options) : string => { } const exposes = (value : string) => (str : string) : boolean => { - const regex = new RegExp('^module\\s+[^\\s]+\\s+exposing\\s+\\(([^)]+)\\)') + const regex = new RegExp('^module\\s+[^\\s]+\\s+exposing\\s+\\((([^)]|.)+)\\)') const match = (str.match(regex) || [])[1] if (match) { return match.split(',').filter(a => a).map(a => a.trim()).includes(value) @@ -327,7 +327,7 @@ const exposes = (value : string) => (str : string) : boolean => { } export const exposesModel = exposes('Model') -export const exposesMsg = exposes('Msg') +export const exposesMsg = (str : string) => exposes('Msg')(str) || exposes('Msg(..)')(str) export const exposesPageFunction = exposes('page') export const exposesViewFunction = exposes('view') diff --git a/src/cli/tests/templates/utils.spec.ts b/src/cli/tests/templates/utils.spec.ts index 1450db5..12c363b 100644 --- a/src/cli/tests/templates/utils.spec.ts +++ b/src/cli/tests/templates/utils.spec.ts @@ -198,4 +198,26 @@ describe.each([['Model'], ['Msg']]) ) `.trim())).toBe(true) }) - }) \ No newline at end of file + }) + +describe('exposes', () => { + it('works with unexposed variants', () =>{ + expect(Utils.exposesMsg('module Page exposing (Msg)')).toBe(true) + expect(Utils.exposesMsg('module Page exposing (Model, Msg)')).toBe(true) + expect(Utils.exposesMsg('module Page exposing (Model, Msg, view)')).toBe(true) + }) + it('works with exposed variants', () =>{ + expect(Utils.exposesMsg('module Page exposing (Msg(..))')).toBe(true) + expect(Utils.exposesMsg('module Page exposing (Model, Msg(..))')).toBe(true) + expect(Utils.exposesMsg('module Page exposing (Model, Msg(..), view)')).toBe(true) + }) + it(`exposed variants don't cause issues for other keywords`, () => { + expect(Utils.exposesModel('module Page exposing (Model, Msg(..), view, page)')).toBe(true) + expect(Utils.exposesViewFunction('module Page exposing (Model, Msg(..), view, page)')).toBe(true) + expect(Utils.exposesPageFunction('module Page exposing (Model, Msg(..), view, page)')).toBe(true) + + expect(Utils.exposesModel('module Page exposing (Msg(..), view) Model')).toBe(false) + expect(Utils.exposesViewFunction('module Page exposing (Model, Msg(..)) view')).toBe(false) + expect(Utils.exposesPageFunction('module Page exposing (Model, Msg(..)) page')).toBe(false) + }) +}) \ No newline at end of file