@knapsack/renderer-twig 5.0.0--canary.6593.4738696.0 β 5.0.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/.lintstagedrc.mjs +2 -2
- package/CHANGELOG.md +149 -0
- package/dist/renderer-twig.d.ts +1 -1
- package/dist/renderer-twig.d.ts.map +1 -1
- package/dist/renderer-twig.js +185 -199
- package/dist/renderer-twig.js.map +1 -1
- package/package.json +13 -13
- package/.eslintrc.js +0 -4
package/.lintstagedrc.mjs
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,152 @@
|
|
|
1
|
+
# v4.89.8 (Fri Feb 20 2026)
|
|
2
|
+
|
|
3
|
+
### Release Notes
|
|
4
|
+
|
|
5
|
+
#### KSP-7685: Synthetic Data for Conflict Enrichment/Resolution testing ([#7154](https://github.com/knapsack-labs/app-monorepo/pull/7154))
|
|
6
|
+
|
|
7
|
+
* **Documentation**
|
|
8
|
+
* Added synthetic multi-source test fixtures including component documentation, design tokens, and brand guidelines for comprehensive testing coverage.
|
|
9
|
+
|
|
10
|
+
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
#### π Bug Fix
|
|
15
|
+
|
|
16
|
+
- merge latest in ([@EmmanuelVelez](https://github.com/EmmanuelVelez))
|
|
17
|
+
- Merge branch 'latest' into sxa/KSP-7037-tests-v2 ([@sxalexander](https://github.com/sxalexander))
|
|
18
|
+
- Use node: protocol prefix in all .lintstagedrc.mjs files ([@EmmanuelVelez](https://github.com/EmmanuelVelez))
|
|
19
|
+
- Migrated ESLint config to flat config format (ESLint 9) ([@EmmanuelVelez](https://github.com/EmmanuelVelez))
|
|
20
|
+
|
|
21
|
+
#### π Internal
|
|
22
|
+
|
|
23
|
+
- KSP-7685: Synthetic Data for Conflict Enrichment/Resolution testing [#7154](https://github.com/knapsack-labs/app-monorepo/pull/7154) ([@sxalexander](https://github.com/sxalexander))
|
|
24
|
+
- KSP-5524 Migrated ESLint config to flat config format (ESLint 9) [#7162](https://github.com/knapsack-labs/app-monorepo/pull/7162) ([@EmmanuelVelez](https://github.com/EmmanuelVelez))
|
|
25
|
+
|
|
26
|
+
#### Authors: 2
|
|
27
|
+
|
|
28
|
+
- [@EmmanuelVelez](https://github.com/EmmanuelVelez)
|
|
29
|
+
- Sam Alexander ([@sxalexander](https://github.com/sxalexander))
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
# v4.89.7 (Fri Feb 06 2026)
|
|
34
|
+
|
|
35
|
+
#### π Bug Fix
|
|
36
|
+
|
|
37
|
+
- Merge branch 'latest' into feature/ksp-6555-remove-app-client-watchers-for-files-in-data-directory ([@EvanLovely](https://github.com/EvanLovely))
|
|
38
|
+
- Merge branch 'latest' into feature/ksp-6555-remove-app-client-watchers-for-files-in-data-directory ([@EmmanuelVelez](https://github.com/EmmanuelVelez))
|
|
39
|
+
|
|
40
|
+
#### π Internal
|
|
41
|
+
|
|
42
|
+
- KSP-6106 Added consistent-type-imports rule with inline type syntax [#7128](https://github.com/knapsack-labs/app-monorepo/pull/7128) ([@EmmanuelVelez](https://github.com/EmmanuelVelez))
|
|
43
|
+
- KSP-7692: expand server actions body size limit [#7097](https://github.com/knapsack-labs/app-monorepo/pull/7097) ([@illepic](https://github.com/illepic))
|
|
44
|
+
- KSP-7623 resolved some of react-hooks/set-state-in-effect lint errors and enab⦠[#7077](https://github.com/knapsack-labs/app-monorepo/pull/7077) ([@EmmanuelVelez](https://github.com/EmmanuelVelez))
|
|
45
|
+
|
|
46
|
+
#### Authors: 3
|
|
47
|
+
|
|
48
|
+
- [@EmmanuelVelez](https://github.com/EmmanuelVelez)
|
|
49
|
+
- Christopher Bloom ([@illepic](https://github.com/illepic))
|
|
50
|
+
- Evan Lovely ([@EvanLovely](https://github.com/EvanLovely))
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
# v4.89.4 (Mon Jan 05 2026)
|
|
55
|
+
|
|
56
|
+
#### π Internal
|
|
57
|
+
|
|
58
|
+
- KSP-6086 normalize error and log metadata for api domains [#6997](https://github.com/knapsack-labs/app-monorepo/pull/6997) ([@EmmanuelVelez](https://github.com/EmmanuelVelez))
|
|
59
|
+
|
|
60
|
+
#### Authors: 1
|
|
61
|
+
|
|
62
|
+
- [@EmmanuelVelez](https://github.com/EmmanuelVelez)
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
# v4.89.3 (Thu Dec 11 2025)
|
|
67
|
+
|
|
68
|
+
#### π Bug Fix
|
|
69
|
+
|
|
70
|
+
- KSP-6536 Fixed align token metrics counting with UI logic for variables and collections [#6778](https://github.com/knapsack-labs/app-monorepo/pull/6778) ([@EmmanuelVelez](https://github.com/EmmanuelVelez))
|
|
71
|
+
- Merge remote-tracking branch 'origin/feature/ksp-6536-metrics-not-computing-tokens-and-variables-correctly' into feature/ksp-6536-metrics-not-computing-tokens-and-variables-correctly ([@EmmanuelVelez](https://github.com/EmmanuelVelez))
|
|
72
|
+
- Merge branch 'latest' into feature/ksp-6536-metrics-not-computing-tokens-and-variables-correctly ([@EmmanuelVelez](https://github.com/EmmanuelVelez))
|
|
73
|
+
|
|
74
|
+
#### Authors: 1
|
|
75
|
+
|
|
76
|
+
- [@EmmanuelVelez](https://github.com/EmmanuelVelez)
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
# v4.89.1 (Wed Dec 10 2025)
|
|
81
|
+
|
|
82
|
+
### Release Notes
|
|
83
|
+
|
|
84
|
+
#### Update twig renderer package version ([#6975](https://github.com/knapsack-labs/app-monorepo/pull/6975))
|
|
85
|
+
|
|
86
|
+
No user-facing changes in this release. This update includes internal dependency maintenance.
|
|
87
|
+
|
|
88
|
+
<sub>βοΈ Tip: You can customize this high-level summary in your review settings.</sub>
|
|
89
|
+
|
|
90
|
+
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
#### π Bug Fix
|
|
95
|
+
|
|
96
|
+
- Merge remote-tracking branch 'origin/latest' into KSP-6900_mcp_onboarding_pages ([@brittanysmart](https://github.com/brittanysmart))
|
|
97
|
+
- Merge branch 'latest' into sxa-KSP-7485-context-fixture ([@sxalexander](https://github.com/sxalexander))
|
|
98
|
+
- Merge branch 'latest' into sxa-KSP-7488 ([@sxalexander](https://github.com/sxalexander))
|
|
99
|
+
|
|
100
|
+
#### π Internal
|
|
101
|
+
|
|
102
|
+
- KSP-6029 Removed deprecated hideTableOfContents page setting [#6973](https://github.com/knapsack-labs/app-monorepo/pull/6973) ([@EmmanuelVelez](https://github.com/EmmanuelVelez))
|
|
103
|
+
- Update twig renderer package version [#6975](https://github.com/knapsack-labs/app-monorepo/pull/6975) ([@rizchelwood](https://github.com/rizchelwood))
|
|
104
|
+
|
|
105
|
+
#### Authors: 4
|
|
106
|
+
|
|
107
|
+
- [@EmmanuelVelez](https://github.com/EmmanuelVelez)
|
|
108
|
+
- Brittany Smart ([@brittanysmart](https://github.com/brittanysmart))
|
|
109
|
+
- Rizchel Wood ([@rizchelwood](https://github.com/rizchelwood))
|
|
110
|
+
- Sam Alexander ([@sxalexander](https://github.com/sxalexander))
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
# v4.87.9 (Thu Nov 20 2025)
|
|
115
|
+
|
|
116
|
+
#### π Internal
|
|
117
|
+
|
|
118
|
+
- fix(deps): update dependency zod to ^4.1.12 [#6861](https://github.com/knapsack-labs/app-monorepo/pull/6861) ([@renovate[bot]](https://github.com/renovate[bot]))
|
|
119
|
+
|
|
120
|
+
#### Authors: 1
|
|
121
|
+
|
|
122
|
+
- [@renovate[bot]](https://github.com/renovate[bot])
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
# v4.87.7 (Mon Nov 10 2025)
|
|
127
|
+
|
|
128
|
+
#### π Internal
|
|
129
|
+
|
|
130
|
+
- fix(deps): update typescript [#6863](https://github.com/knapsack-labs/app-monorepo/pull/6863) ([@renovate[bot]](https://github.com/renovate[bot]))
|
|
131
|
+
|
|
132
|
+
#### Authors: 1
|
|
133
|
+
|
|
134
|
+
- [@renovate[bot]](https://github.com/renovate[bot])
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
# v4.87.6 (Wed Nov 05 2025)
|
|
139
|
+
|
|
140
|
+
#### π Internal
|
|
141
|
+
|
|
142
|
+
- Add comprehensive testing for remaining frameworks and MUI lib [#6876](https://github.com/knapsack-labs/app-monorepo/pull/6876) ([@mabry1985](https://github.com/mabry1985))
|
|
143
|
+
|
|
144
|
+
#### Authors: 1
|
|
145
|
+
|
|
146
|
+
- Josh Mabry ([@mabry1985](https://github.com/mabry1985))
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
1
150
|
# v4.87.4 (Fri Oct 31 2025)
|
|
2
151
|
|
|
3
152
|
#### π Internal
|
package/dist/renderer-twig.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Renderable, Renderer as RendererType, RendererBase } from '@knapsack/app/renderers';
|
|
1
|
+
import { type Renderable, type Renderer as RendererType, RendererBase } from '@knapsack/app/renderers';
|
|
2
2
|
import TwigRenderer from '@basalt/twig-renderer';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
type Renderer = RendererType<'twig'>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-twig.d.ts","sourceRoot":"","sources":["../src/renderer-twig.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,
|
|
1
|
+
{"version":3,"file":"renderer-twig.d.ts","sourceRoot":"","sources":["../src/renderer-twig.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,QAAQ,IAAI,YAAY,EAC7B,YAAY,EAEb,MAAM,yBAAyB,CAAC;AAOjC,OAAO,YAAyC,MAAM,uBAAuB,CAAC;AAQ9E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,KAAK,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AAUrC,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;kBA4BhB,CAAC;AAKH,qBAAa,oBACX,SAAQ,YAAY,CAAC,MAAM,CAC3B,YAAW,UAAU,CAAC,MAAM,CAAC;;IAE7B,YAAY,EAAE,YAAY,CAAC;gBAGf,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC;IAiChD,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAKxB;IAEF,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,CAqG5B;IAEF,YAAY,EAAE,QAAQ,CAAC,cAAc,CAAC,CA4CpC;IAEF,sBAAsB,EAAE,QAAQ,CAAC,wBAAwB,CAAC,CAiDxD;IAEF,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,CA4BzB;CACJ"}
|
package/dist/renderer-twig.js
CHANGED
|
@@ -1,19 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
6
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
-
};
|
|
8
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
-
};
|
|
13
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
4
|
};
|
|
16
|
-
var _KnapsackTwigRenderer_src;
|
|
17
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
6
|
exports.KnapsackTwigRenderer = void 0;
|
|
19
7
|
const renderers_1 = require("@knapsack/app/renderers");
|
|
@@ -56,197 +44,14 @@ const OptionSchema = zod_1.z.strictObject({
|
|
|
56
44
|
(0, utils_1.expectType)(true);
|
|
57
45
|
(0, utils_1.expectType)(true);
|
|
58
46
|
class KnapsackTwigRenderer extends renderers_1.RendererBase {
|
|
47
|
+
twigRenderer;
|
|
48
|
+
#src;
|
|
59
49
|
constructor(config) {
|
|
60
50
|
super({
|
|
61
51
|
id: types_1.rendererIds.twig,
|
|
62
52
|
language: 'twig',
|
|
63
53
|
codeSrcsUserConfig: [],
|
|
64
54
|
});
|
|
65
|
-
_KnapsackTwigRenderer_src.set(this, void 0);
|
|
66
|
-
this.render = async (opt) => {
|
|
67
|
-
const usage = await this.getUsage(opt);
|
|
68
|
-
const results = await this.twigRenderer.renderString(usage);
|
|
69
|
-
return { ...results, usage, templateLanguage: this.language };
|
|
70
|
-
// return this.twigRenderer.render(template.alias, data);
|
|
71
|
-
};
|
|
72
|
-
this.getUsage = async ({ demo, state }) => {
|
|
73
|
-
if (!demo) {
|
|
74
|
-
throw new Error(`No demo received`);
|
|
75
|
-
}
|
|
76
|
-
switch (demo.type) {
|
|
77
|
-
case 'template': {
|
|
78
|
-
const { absolutePath: templateDemoPath, exists } = await this.resolvePath(demo.templateInfo.path);
|
|
79
|
-
if (!exists) {
|
|
80
|
-
throw new Error(`Could not find template demo file at ${templateDemoPath}`);
|
|
81
|
-
}
|
|
82
|
-
return (0, file_utils_1.readFile)(templateDemoPath);
|
|
83
|
-
}
|
|
84
|
-
case 'data-w-template-info':
|
|
85
|
-
case 'data': {
|
|
86
|
-
const { namespacePath } = this.normalizeDemo({ demo, state });
|
|
87
|
-
const { data: { props, slots, slotsOptionsComputed }, } = demo;
|
|
88
|
-
if (!slots) {
|
|
89
|
-
return (0, utils_2.getTwigUsage)({
|
|
90
|
-
templateName: namespacePath,
|
|
91
|
-
props,
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
{
|
|
95
|
-
const slotProps = {};
|
|
96
|
-
await Promise.all(Object.keys(slots).map(async (slotName) => {
|
|
97
|
-
const slottedTemplates = slots[slotName];
|
|
98
|
-
slotProps[slotName] = await Promise.all(slottedTemplates.map(async (slottedTemplate) => {
|
|
99
|
-
if (slottedTemplate.type === 'text') {
|
|
100
|
-
return ` ${slottedTemplate.text}`;
|
|
101
|
-
}
|
|
102
|
-
if (slottedTemplate.type === 'template-reference') {
|
|
103
|
-
throw new Error(`Cannot handle slotted template references in ${JSON.stringify({
|
|
104
|
-
demoId: demo.id,
|
|
105
|
-
slottedTemplate,
|
|
106
|
-
})}`);
|
|
107
|
-
}
|
|
108
|
-
const usage = await this.getUsage({
|
|
109
|
-
demo: slottedTemplate.demo,
|
|
110
|
-
state,
|
|
111
|
-
});
|
|
112
|
-
// indenting 2 spaces since it will be in a `{% set slotName %}` block
|
|
113
|
-
return usage
|
|
114
|
-
.split('\n')
|
|
115
|
-
.map((line) => ` ${line}`)
|
|
116
|
-
.join('\n');
|
|
117
|
-
}));
|
|
118
|
-
}));
|
|
119
|
-
const extraProps = [];
|
|
120
|
-
const slotIncludes = Object.keys(slotProps).map((slotName) => {
|
|
121
|
-
extraProps.push({
|
|
122
|
-
key: slotName,
|
|
123
|
-
value: slotName,
|
|
124
|
-
});
|
|
125
|
-
const slotCodes = slotProps[slotName];
|
|
126
|
-
const slotOptionsComputed = slotsOptionsComputed === null || slotsOptionsComputed === void 0 ? void 0 : slotsOptionsComputed[slotName];
|
|
127
|
-
const { openTag, closeTag } = (0, renderers_1.createSlotOptionsHtmlTags)({
|
|
128
|
-
slotOptionsComputed,
|
|
129
|
-
classAttributeName: 'class',
|
|
130
|
-
stylesValueType: 'string',
|
|
131
|
-
});
|
|
132
|
-
return `
|
|
133
|
-
{% set ${slotName} %}
|
|
134
|
-
${[openTag, ...slotCodes, closeTag].filter(Boolean).join('\n')}
|
|
135
|
-
{% endset %}
|
|
136
|
-
`.trim();
|
|
137
|
-
});
|
|
138
|
-
const usage = await (0, utils_2.getTwigUsage)({
|
|
139
|
-
templateName: namespacePath,
|
|
140
|
-
props,
|
|
141
|
-
before: slotIncludes.join('\n\n'),
|
|
142
|
-
extraProps,
|
|
143
|
-
});
|
|
144
|
-
return usage;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
default: {
|
|
148
|
-
const _exhaustiveCheck = demo;
|
|
149
|
-
throw new Error(`Unknown demo type: ${JSON.stringify(demo)}`);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
};
|
|
153
|
-
this.getDiscovery = async () => {
|
|
154
|
-
var _a, _b, _c, _d;
|
|
155
|
-
const [rootDir] = (_b = (_a = __classPrivateFieldGet(this, _KnapsackTwigRenderer_src, "f")) === null || _a === void 0 ? void 0 : _a.roots) !== null && _b !== void 0 ? _b : [];
|
|
156
|
-
if (!rootDir) {
|
|
157
|
-
return {
|
|
158
|
-
rendererId: this.id,
|
|
159
|
-
meta: this.getMeta(),
|
|
160
|
-
codeSrcsByPath: Object.fromEntries(this.codeSrcs.entries()),
|
|
161
|
-
templates: [],
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
// `@namespace/path/to/file.twig`
|
|
165
|
-
const twigPaths = await Promise.all((_c = __classPrivateFieldGet(this, _KnapsackTwigRenderer_src, "f").namespaces) === null || _c === void 0 ? void 0 : _c.map(async ({ id, paths }) => {
|
|
166
|
-
const twigFiles = await (0, file_utils_1.globby)(paths
|
|
167
|
-
.map((path) => (0, path_1.isAbsolute)(path) ? path : (0, path_1.join)(this.userConfigDir, path))
|
|
168
|
-
.map((p) => (0, path_1.join)(p, '*.twig')), {
|
|
169
|
-
cwd: this.userConfigDir,
|
|
170
|
-
absolute: true,
|
|
171
|
-
});
|
|
172
|
-
return twigFiles.map((path) => {
|
|
173
|
-
const relativePath = (0, path_1.relative)(rootDir, path);
|
|
174
|
-
return (0, path_1.join)(`@${id}`, relativePath);
|
|
175
|
-
});
|
|
176
|
-
})).then((paths) => paths.flat());
|
|
177
|
-
return {
|
|
178
|
-
rendererId: this.id,
|
|
179
|
-
meta: this.getMeta(),
|
|
180
|
-
codeSrcsByPath: Object.fromEntries(this.codeSrcs.entries()),
|
|
181
|
-
templates: (_d = twigPaths === null || twigPaths === void 0 ? void 0 : twigPaths.map((twigPath) => (0, types_1.addIdToTemplateInfo)({
|
|
182
|
-
namespacePath: twigPath,
|
|
183
|
-
rendererId: this.id,
|
|
184
|
-
}))) !== null && _d !== void 0 ? _d : [],
|
|
185
|
-
};
|
|
186
|
-
};
|
|
187
|
-
this.getTemplateSuggestions = async ({ state, }) => {
|
|
188
|
-
var _a, _b;
|
|
189
|
-
const { unusedPaths, usedPaths } = await this.getUnusedTemplatePaths({
|
|
190
|
-
globPaths: __classPrivateFieldGet(this, _KnapsackTwigRenderer_src, "f").roots.map((root) => (0, path_1.join)(root, '**/*.twig')),
|
|
191
|
-
cwd: this.userConfigDir,
|
|
192
|
-
state,
|
|
193
|
-
});
|
|
194
|
-
const namespaces = (_b = (_a = __classPrivateFieldGet(this, _KnapsackTwigRenderer_src, "f").namespaces) === null || _a === void 0 ? void 0 : _a.map(({ id, paths }) => {
|
|
195
|
-
const absPaths = paths.map((path) => (0, path_1.isAbsolute)(path) ? path : (0, path_1.join)(this.userConfigDir, path));
|
|
196
|
-
return {
|
|
197
|
-
id,
|
|
198
|
-
paths: absPaths,
|
|
199
|
-
};
|
|
200
|
-
})) !== null && _b !== void 0 ? _b : [];
|
|
201
|
-
const createSuggestion = (twigPath, connected) => {
|
|
202
|
-
const namespace = namespaces.find(({ paths }) => paths.some((path) => twigPath.startsWith(path)));
|
|
203
|
-
let alias;
|
|
204
|
-
if (namespace) {
|
|
205
|
-
namespace.paths.forEach((path) => {
|
|
206
|
-
if (twigPath.startsWith(path)) {
|
|
207
|
-
const subPath = (0, path_1.relative)(path, twigPath);
|
|
208
|
-
alias = `@${namespace.id}/${subPath}`;
|
|
209
|
-
}
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
|
-
return {
|
|
213
|
-
path: twigPath,
|
|
214
|
-
alias,
|
|
215
|
-
connected,
|
|
216
|
-
};
|
|
217
|
-
};
|
|
218
|
-
const unusedSuggestions = unusedPaths.map((path) => createSuggestion(path, false));
|
|
219
|
-
const usedSuggestions = usedPaths.map((path) => createSuggestion(path, true));
|
|
220
|
-
return { suggestions: [...unusedSuggestions, ...usedSuggestions] };
|
|
221
|
-
};
|
|
222
|
-
this.getMeta = () => ({
|
|
223
|
-
id: this.id,
|
|
224
|
-
title: 'Twig',
|
|
225
|
-
aliasUse: 'optional',
|
|
226
|
-
aliasTitle: 'Namespaced Path',
|
|
227
|
-
aliasDescription: "If using Twig Namespaces (i.e. `@components`) then provide the value you'd provide to a Twig `include`, such as `@components/card.twig`.",
|
|
228
|
-
enableDataDemos: true,
|
|
229
|
-
enableTemplateDemos: true,
|
|
230
|
-
hasSlotsSupport: true,
|
|
231
|
-
hasSlotOptionsSupport: true,
|
|
232
|
-
version: pkg.version,
|
|
233
|
-
hasInferSpecSupport: false,
|
|
234
|
-
hasTemplateSuggestionsSupport: true,
|
|
235
|
-
prototypingTemplate: {
|
|
236
|
-
path: '',
|
|
237
|
-
alias: `@${protoTwigNamespace}/${(0, path_1.basename)(protoTemplatePath)}`,
|
|
238
|
-
spec: {
|
|
239
|
-
isInferred: false,
|
|
240
|
-
props: {
|
|
241
|
-
type: 'object',
|
|
242
|
-
properties: {},
|
|
243
|
-
},
|
|
244
|
-
slots: {
|
|
245
|
-
children: { title: 'Children' },
|
|
246
|
-
},
|
|
247
|
-
},
|
|
248
|
-
},
|
|
249
|
-
});
|
|
250
55
|
const { error } = OptionSchema.safeParse(config);
|
|
251
56
|
if (error) {
|
|
252
57
|
this.log.error(`"KnapsackTwigRenderer" constructor has invalid options, please fix in "knapsack.config.cjs":`, zod_1.z.prettifyError(error));
|
|
@@ -254,7 +59,7 @@ ${[openTag, ...slotCodes, closeTag].filter(Boolean).join('\n')}
|
|
|
254
59
|
return;
|
|
255
60
|
}
|
|
256
61
|
// copying b/c `TwigRenderer` mutates config!
|
|
257
|
-
|
|
62
|
+
this.#src = JSON.parse(JSON.stringify(config.src));
|
|
258
63
|
this.twigRenderer = new twig_renderer_1.default({
|
|
259
64
|
keepAlive: process.env.NODE_ENV === 'production',
|
|
260
65
|
...config,
|
|
@@ -270,7 +75,188 @@ ${[openTag, ...slotCodes, closeTag].filter(Boolean).join('\n')}
|
|
|
270
75
|
},
|
|
271
76
|
});
|
|
272
77
|
}
|
|
78
|
+
render = async (opt) => {
|
|
79
|
+
const usage = await this.getUsage(opt);
|
|
80
|
+
const results = await this.twigRenderer.renderString(usage);
|
|
81
|
+
return { ...results, usage, templateLanguage: this.language };
|
|
82
|
+
// return this.twigRenderer.render(template.alias, data);
|
|
83
|
+
};
|
|
84
|
+
getUsage = async ({ demo, state }) => {
|
|
85
|
+
if (!demo) {
|
|
86
|
+
throw new Error(`No demo received`);
|
|
87
|
+
}
|
|
88
|
+
switch (demo.type) {
|
|
89
|
+
case 'template': {
|
|
90
|
+
const { absolutePath: templateDemoPath, exists } = await this.resolvePath(demo.templateInfo.path);
|
|
91
|
+
if (!exists) {
|
|
92
|
+
throw new Error(`Could not find template demo file at ${templateDemoPath}`);
|
|
93
|
+
}
|
|
94
|
+
return (0, file_utils_1.readFile)(templateDemoPath);
|
|
95
|
+
}
|
|
96
|
+
case 'data-w-template-info':
|
|
97
|
+
case 'data': {
|
|
98
|
+
const { namespacePath } = this.normalizeDemo({ demo, state });
|
|
99
|
+
const { data: { props, slots, slotsOptionsComputed }, } = demo;
|
|
100
|
+
if (!slots) {
|
|
101
|
+
return (0, utils_2.getTwigUsage)({
|
|
102
|
+
templateName: namespacePath,
|
|
103
|
+
props,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
{
|
|
107
|
+
const slotProps = {};
|
|
108
|
+
await Promise.all(Object.keys(slots).map(async (slotName) => {
|
|
109
|
+
const slottedTemplates = slots[slotName];
|
|
110
|
+
slotProps[slotName] = await Promise.all(slottedTemplates.map(async (slottedTemplate) => {
|
|
111
|
+
if (slottedTemplate.type === 'text') {
|
|
112
|
+
return ` ${slottedTemplate.text}`;
|
|
113
|
+
}
|
|
114
|
+
if (slottedTemplate.type === 'template-reference') {
|
|
115
|
+
throw new Error(`Cannot handle slotted template references in ${JSON.stringify({
|
|
116
|
+
demoId: demo.id,
|
|
117
|
+
slottedTemplate,
|
|
118
|
+
})}`);
|
|
119
|
+
}
|
|
120
|
+
const usage = await this.getUsage({
|
|
121
|
+
demo: slottedTemplate.demo,
|
|
122
|
+
state,
|
|
123
|
+
});
|
|
124
|
+
// indenting 2 spaces since it will be in a `{% set slotName %}` block
|
|
125
|
+
return usage
|
|
126
|
+
.split('\n')
|
|
127
|
+
.map((line) => ` ${line}`)
|
|
128
|
+
.join('\n');
|
|
129
|
+
}));
|
|
130
|
+
}));
|
|
131
|
+
const extraProps = [];
|
|
132
|
+
const slotIncludes = Object.keys(slotProps).map((slotName) => {
|
|
133
|
+
extraProps.push({
|
|
134
|
+
key: slotName,
|
|
135
|
+
value: slotName,
|
|
136
|
+
});
|
|
137
|
+
const slotCodes = slotProps[slotName];
|
|
138
|
+
const slotOptionsComputed = slotsOptionsComputed?.[slotName];
|
|
139
|
+
const { openTag, closeTag } = (0, renderers_1.createSlotOptionsHtmlTags)({
|
|
140
|
+
slotOptionsComputed,
|
|
141
|
+
classAttributeName: 'class',
|
|
142
|
+
stylesValueType: 'string',
|
|
143
|
+
});
|
|
144
|
+
return `
|
|
145
|
+
{% set ${slotName} %}
|
|
146
|
+
${[openTag, ...slotCodes, closeTag].filter(Boolean).join('\n')}
|
|
147
|
+
{% endset %}
|
|
148
|
+
`.trim();
|
|
149
|
+
});
|
|
150
|
+
const usage = await (0, utils_2.getTwigUsage)({
|
|
151
|
+
templateName: namespacePath,
|
|
152
|
+
props,
|
|
153
|
+
before: slotIncludes.join('\n\n'),
|
|
154
|
+
extraProps,
|
|
155
|
+
});
|
|
156
|
+
return usage;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
default: {
|
|
160
|
+
const _exhaustiveCheck = demo;
|
|
161
|
+
throw new Error(`Unknown demo type: ${JSON.stringify(demo)}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
getDiscovery = async () => {
|
|
166
|
+
const [rootDir] = this.#src?.roots ?? [];
|
|
167
|
+
if (!rootDir) {
|
|
168
|
+
return {
|
|
169
|
+
rendererId: this.id,
|
|
170
|
+
meta: this.getMeta(),
|
|
171
|
+
codeSrcsByPath: Object.fromEntries(this.codeSrcs.entries()),
|
|
172
|
+
templates: [],
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
// `@namespace/path/to/file.twig`
|
|
176
|
+
const twigPaths = await Promise.all(this.#src.namespaces?.map(async ({ id, paths }) => {
|
|
177
|
+
const twigFiles = await (0, file_utils_1.globby)(paths
|
|
178
|
+
.map((path) => (0, path_1.isAbsolute)(path) ? path : (0, path_1.join)(this.userConfigDir, path))
|
|
179
|
+
.map((p) => (0, path_1.join)(p, '*.twig')), {
|
|
180
|
+
cwd: this.userConfigDir,
|
|
181
|
+
absolute: true,
|
|
182
|
+
});
|
|
183
|
+
return twigFiles.map((path) => {
|
|
184
|
+
const relativePath = (0, path_1.relative)(rootDir, path);
|
|
185
|
+
return (0, path_1.join)(`@${id}`, relativePath);
|
|
186
|
+
});
|
|
187
|
+
})).then((paths) => paths.flat());
|
|
188
|
+
return {
|
|
189
|
+
rendererId: this.id,
|
|
190
|
+
meta: this.getMeta(),
|
|
191
|
+
codeSrcsByPath: Object.fromEntries(this.codeSrcs.entries()),
|
|
192
|
+
templates: twigPaths?.map((twigPath) => (0, types_1.addIdToTemplateInfo)({
|
|
193
|
+
namespacePath: twigPath,
|
|
194
|
+
rendererId: this.id,
|
|
195
|
+
})) ?? [],
|
|
196
|
+
};
|
|
197
|
+
};
|
|
198
|
+
getTemplateSuggestions = async ({ state, }) => {
|
|
199
|
+
const { unusedPaths, usedPaths } = await this.getUnusedTemplatePaths({
|
|
200
|
+
globPaths: this.#src.roots.map((root) => (0, path_1.join)(root, '**/*.twig')),
|
|
201
|
+
cwd: this.userConfigDir,
|
|
202
|
+
state,
|
|
203
|
+
});
|
|
204
|
+
const namespaces = this.#src.namespaces?.map(({ id, paths }) => {
|
|
205
|
+
const absPaths = paths.map((path) => (0, path_1.isAbsolute)(path) ? path : (0, path_1.join)(this.userConfigDir, path));
|
|
206
|
+
return {
|
|
207
|
+
id,
|
|
208
|
+
paths: absPaths,
|
|
209
|
+
};
|
|
210
|
+
}) ?? [];
|
|
211
|
+
const createSuggestion = (twigPath, connected) => {
|
|
212
|
+
const namespace = namespaces.find(({ paths }) => paths.some((path) => twigPath.startsWith(path)));
|
|
213
|
+
let alias;
|
|
214
|
+
if (namespace) {
|
|
215
|
+
namespace.paths.forEach((path) => {
|
|
216
|
+
if (twigPath.startsWith(path)) {
|
|
217
|
+
const subPath = (0, path_1.relative)(path, twigPath);
|
|
218
|
+
alias = `@${namespace.id}/${subPath}`;
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
return {
|
|
223
|
+
path: twigPath,
|
|
224
|
+
alias,
|
|
225
|
+
connected,
|
|
226
|
+
};
|
|
227
|
+
};
|
|
228
|
+
const unusedSuggestions = unusedPaths.map((path) => createSuggestion(path, false));
|
|
229
|
+
const usedSuggestions = usedPaths.map((path) => createSuggestion(path, true));
|
|
230
|
+
return { suggestions: [...unusedSuggestions, ...usedSuggestions] };
|
|
231
|
+
};
|
|
232
|
+
getMeta = () => ({
|
|
233
|
+
id: this.id,
|
|
234
|
+
title: 'Twig',
|
|
235
|
+
aliasUse: 'optional',
|
|
236
|
+
aliasTitle: 'Namespaced Path',
|
|
237
|
+
aliasDescription: "If using Twig Namespaces (i.e. `@components`) then provide the value you'd provide to a Twig `include`, such as `@components/card.twig`.",
|
|
238
|
+
enableDataDemos: true,
|
|
239
|
+
enableTemplateDemos: true,
|
|
240
|
+
hasSlotsSupport: true,
|
|
241
|
+
hasSlotOptionsSupport: true,
|
|
242
|
+
version: pkg.version,
|
|
243
|
+
hasInferSpecSupport: false,
|
|
244
|
+
hasTemplateSuggestionsSupport: true,
|
|
245
|
+
prototypingTemplate: {
|
|
246
|
+
path: '',
|
|
247
|
+
alias: `@${protoTwigNamespace}/${(0, path_1.basename)(protoTemplatePath)}`,
|
|
248
|
+
spec: {
|
|
249
|
+
isInferred: false,
|
|
250
|
+
props: {
|
|
251
|
+
type: 'object',
|
|
252
|
+
properties: {},
|
|
253
|
+
},
|
|
254
|
+
slots: {
|
|
255
|
+
children: { title: 'Children' },
|
|
256
|
+
},
|
|
257
|
+
},
|
|
258
|
+
},
|
|
259
|
+
});
|
|
273
260
|
}
|
|
274
261
|
exports.KnapsackTwigRenderer = KnapsackTwigRenderer;
|
|
275
|
-
_KnapsackTwigRenderer_src = new WeakMap();
|
|
276
262
|
//# sourceMappingURL=renderer-twig.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-twig.js","sourceRoot":"","sources":["../src/renderer-twig.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"renderer-twig.js","sourceRoot":"","sources":["../src/renderer-twig.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@knapsack/renderer-twig",
|
|
3
3
|
"description": "Render Twig",
|
|
4
|
-
"version": "5.0.0
|
|
4
|
+
"version": "5.0.0",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
7
7
|
"exports": {
|
|
@@ -24,20 +24,20 @@
|
|
|
24
24
|
},
|
|
25
25
|
"author": "Knapsack (https://www.knapsack.cloud)",
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@basalt/twig-renderer": "^3.2.
|
|
28
|
-
"@knapsack/app": "5.0.0
|
|
29
|
-
"@knapsack/file-utils": "5.0.0
|
|
30
|
-
"@knapsack/types": "5.0.0
|
|
31
|
-
"@knapsack/utils": "5.0.0
|
|
27
|
+
"@basalt/twig-renderer": "^3.2.8",
|
|
28
|
+
"@knapsack/app": "5.0.0",
|
|
29
|
+
"@knapsack/file-utils": "5.0.0",
|
|
30
|
+
"@knapsack/types": "5.0.0",
|
|
31
|
+
"@knapsack/utils": "5.0.0",
|
|
32
32
|
"ejs": "^3.1.10",
|
|
33
|
-
"zod": "^4.
|
|
33
|
+
"zod": "^4.3.6"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@knapsack/eslint-config-starter": "5.0.0
|
|
37
|
-
"@knapsack/typescript-config-starter": "5.0.0
|
|
38
|
-
"eslint": "^
|
|
39
|
-
"typescript": "^5.9.
|
|
40
|
-
"vitest": "^
|
|
36
|
+
"@knapsack/eslint-config-starter": "5.0.0",
|
|
37
|
+
"@knapsack/typescript-config-starter": "5.0.0",
|
|
38
|
+
"eslint": "^9.20.0",
|
|
39
|
+
"typescript": "^5.9.3",
|
|
40
|
+
"vitest": "^4.1.9"
|
|
41
41
|
},
|
|
42
42
|
"publishConfig": {
|
|
43
43
|
"access": "public"
|
|
@@ -47,5 +47,5 @@
|
|
|
47
47
|
"directory": "apps/client/renderers/renderer-twig",
|
|
48
48
|
"type": "git"
|
|
49
49
|
},
|
|
50
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "31e09ba72245b95bef52e73ce5076de51936286c"
|
|
51
51
|
}
|
package/.eslintrc.js
DELETED