@monkeyplus/flow 6.0.12 → 6.0.13

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 CHANGED
@@ -25,6 +25,11 @@ La guia detallada de authoring vive en `docs/authoring.md` e incluye:
25
25
  - como organizar templates, layouts y `*.context.ts`
26
26
  - como trabajar con `FlowIsland` y `client/islands/*`
27
27
 
28
+ Documentacion complementaria:
29
+
30
+ - `docs/modules.md`: referencia de modulos builtin
31
+ - `docs/recipes.md`: recetas basadas en el playground actual
32
+
28
33
  Si vas a crear o mantener una app en Flow, ese archivo deberia ser el punto de entrada principal.
29
34
 
30
35
  ## API pública
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@monkeyplus/flow",
3
- "version": "6.0.12",
3
+ "version": "6.0.13",
4
4
  "description": "@monkeyplus/flow package-first runtime with Vite, Nitro, Vue and a workspace playground.",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -130,6 +130,26 @@ function replacePath(pattern, url) {
130
130
  function combineName(name, dynamicName) {
131
131
  return `${name.replace(/\/*$/, "")}/${dynamicName.replace(/^\/*/, "")}`;
132
132
  }
133
+ function resolveUrlTarget(namePage, explicitDynamicName) {
134
+ if (explicitDynamicName || !namePage.includes("/")) {
135
+ return {
136
+ namePage,
137
+ dynamicName: explicitDynamicName
138
+ };
139
+ }
140
+ const match = pageDefinitions.filter((candidate) => candidate.name && namePage.startsWith(`${candidate.name}/`)).sort((left, right) => right.name.length - left.name.length)[0];
141
+ if (!match) {
142
+ return {
143
+ namePage,
144
+ dynamicName: explicitDynamicName
145
+ };
146
+ }
147
+ const dynamicName = namePage.slice(match.name.length + 1);
148
+ return {
149
+ namePage: match.name,
150
+ dynamicName: dynamicName || explicitDynamicName
151
+ };
152
+ }
133
153
  function getEnabledLocaleCodes() {
134
154
  const runtimeConfig = getFlowRuntimeConfig();
135
155
  return runtimeConfig.flow?.locale?.locales || [];
@@ -163,8 +183,9 @@ export async function getUrl(namePage, localeCode, options = {}) {
163
183
  const enabledLocales = getEnabledLocaleCodes();
164
184
  const targetLocale = localeCode || enabledLocales[0];
165
185
  const runtimeConfig = getFlowRuntimeConfig();
186
+ const target = resolveUrlTarget(namePage, options.dynamicName);
166
187
  for (const definition of pageDefinitions) {
167
- if (definition.name !== namePage) {
188
+ if (definition.name !== target.namePage) {
168
189
  continue;
169
190
  }
170
191
  const localeEntries = targetLocale ? [targetLocale] : Object.keys(definition.locales);
@@ -180,11 +201,11 @@ export async function getUrl(namePage, localeCode, options = {}) {
180
201
  if (options.params) {
181
202
  return replacePath(localizedRoute, options.params);
182
203
  }
183
- if (localePage.dynamic && options.dynamicName) {
204
+ if (localePage.dynamic && target.dynamicName) {
184
205
  const locale = createLocale(code);
185
206
  const ctx = createContext(definition, locale, localePage, toPublicRoute(runtimeConfig.flow, code, localePage.url), {});
186
207
  const entries = await getDynamicEntries(definition, code, ctx);
187
- const entry = entries.find((candidate) => candidate.name === options.dynamicName);
208
+ const entry = entries.find((candidate) => candidate.name === target.dynamicName);
188
209
  if (!entry) {
189
210
  return void 0;
190
211
  }
@@ -53,6 +53,26 @@ function replacePath(pattern, url) {
53
53
  function combineName(name, dynamicName) {
54
54
  return `${name.replace(/\/*$/, "")}/${dynamicName.replace(/^\/*/, "")}`;
55
55
  }
56
+ function resolveUrlTarget(definitions, namePage, explicitDynamicName) {
57
+ if (explicitDynamicName || !namePage.includes("/")) {
58
+ return {
59
+ namePage,
60
+ dynamicName: explicitDynamicName
61
+ };
62
+ }
63
+ const match = definitions.filter((candidate) => candidate.name && namePage.startsWith(`${candidate.name}/`)).sort((left, right) => right.name.length - left.name.length)[0];
64
+ if (!match) {
65
+ return {
66
+ namePage,
67
+ dynamicName: explicitDynamicName
68
+ };
69
+ }
70
+ const dynamicName = namePage.slice(match.name.length + 1);
71
+ return {
72
+ namePage: match.name,
73
+ dynamicName: dynamicName || explicitDynamicName
74
+ };
75
+ }
56
76
  function createContext(definitions, flowConfig, definition, locale, localePage, pathname, params, dynamic) {
57
77
  return {
58
78
  dynamic,
@@ -111,7 +131,8 @@ export async function loadPageDefinitions(projectRoot, flowConfig) {
111
131
  return pages;
112
132
  }
113
133
  export async function getUrlFromDefinitions(definitions, flowConfig, namePage, localeCode = flowConfig.locale.locales[0], options = {}) {
114
- const definition = definitions.find((candidate) => candidate.name === namePage);
134
+ const target = resolveUrlTarget(definitions, namePage, options.dynamicName);
135
+ const definition = definitions.find((candidate) => candidate.name === target.namePage);
115
136
  if (!definition) {
116
137
  return void 0;
117
138
  }
@@ -126,9 +147,9 @@ export async function getUrlFromDefinitions(definitions, flowConfig, namePage, l
126
147
  if (options.params) {
127
148
  return replacePath(localizedRoute, options.params);
128
149
  }
129
- if (localePage.dynamic && options.dynamicName) {
150
+ if (localePage.dynamic && target.dynamicName) {
130
151
  const entries = await getDynamicEntries(definitions, flowConfig, definition, localeCode, localePage);
131
- const entry = entries.find((candidate) => candidate.name === options.dynamicName);
152
+ const entry = entries.find((candidate) => candidate.name === target.dynamicName);
132
153
  if (!entry) {
133
154
  return void 0;
134
155
  }