tungsten 0.3.2 → 0.3.3
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/dist/.build-complete +1 -0
- package/dist/Framework.d.ts +2 -0
- package/dist/Framework.d.ts.map +1 -1
- package/dist/Framework.js +68 -57
- package/dist/FrameworkConfig.d.ts +2 -0
- package/dist/FrameworkConfig.d.ts.map +1 -1
- package/dist/Instance/Instance.d.ts.map +1 -1
- package/dist/Instance/Instance.js +18 -1
- package/dist/Instance/InstanceConfig.d.ts +1 -0
- package/dist/Instance/InstanceConfig.d.ts.map +1 -1
- package/dist/PopMessage.type.d.ts +6 -0
- package/dist/PopMessage.type.d.ts.map +1 -0
- package/dist/PopMessage.type.js +1 -0
- package/dist/Servers/DevServer.d.ts +2 -0
- package/dist/Servers/DevServer.d.ts.map +1 -1
- package/dist/Servers/DevServer.js +84 -8
- package/dist/Servers/MatchedRouteInfo.d.ts +1 -1
- package/dist/Servers/MatchedRouteInfo.d.ts.map +1 -1
- package/dist/Servers/ProdServer.d.ts +1 -0
- package/dist/Servers/ProdServer.d.ts.map +1 -1
- package/dist/Servers/ProdServer.js +79 -5
- package/dist/Servers/hono/DevServerHono.js +25 -29
- package/dist/Servers/hono/ProdServerHono.js +49 -142
- package/dist/Servers/hono/TungstenServerHono.d.ts +1 -1
- package/dist/Servers/hono/TungstenServerHono.d.ts.map +1 -1
- package/dist/Servers/hono/TungstenServerHono.js +12 -29
- package/dist/Servers/routing.d.ts.map +1 -1
- package/dist/Servers/routing.js +10 -6
- package/dist/Servers/tungstenCorePrivateEnvSchema.d.ts +0 -3
- package/dist/Servers/tungstenCorePrivateEnvSchema.d.ts.map +1 -1
- package/dist/Servers/tungstenCorePrivateEnvSchema.js +3 -3
- package/dist/Servers/tungstenCorePublicEnvSchema.d.ts +8 -0
- package/dist/Servers/tungstenCorePublicEnvSchema.d.ts.map +1 -0
- package/dist/Servers/tungstenCorePublicEnvSchema.js +14 -0
- package/dist/Store/InternalStoreSchema.d.ts +2 -0
- package/dist/Store/InternalStoreSchema.d.ts.map +1 -1
- package/dist/Store/InternalStoreSchema.js +1 -0
- package/dist/api/Request.d.ts +1 -1
- package/dist/api/Request.d.ts.map +1 -1
- package/dist/api/Response.d.ts +1 -1
- package/dist/api/Response.d.ts.map +1 -1
- package/dist/babelPlugins/BabelTypes.d.ts +2 -2
- package/dist/babelPlugins/BabelTypes.d.ts.map +1 -1
- package/dist/babelPlugins/BabelTypes.js +0 -1
- package/dist/bin/commands/build.d.ts.map +1 -1
- package/dist/bin/commands/build.js +3 -0
- package/dist/bin/commands/dev.d.ts.map +1 -1
- package/dist/bin/commands/dev.js +15 -4
- package/dist/bin/commands/devmon.d.ts +2 -0
- package/dist/bin/commands/devmon.d.ts.map +1 -0
- package/dist/bin/commands/devmon.js +66 -0
- package/dist/bin/index.d.ts.map +1 -1
- package/dist/bin/index.js +6 -0
- package/dist/booleanAttributeValue.d.ts +21 -0
- package/dist/booleanAttributeValue.d.ts.map +1 -0
- package/dist/booleanAttributeValue.js +23 -0
- package/dist/build/compileJavascript.js +1 -1
- package/dist/build/compileUserApp.d.ts +2 -1
- package/dist/build/compileUserApp.d.ts.map +1 -1
- package/dist/build/compileUserApp.js +8 -7
- package/dist/build/createInstanceConfigFile.js +1 -1
- package/dist/compat/types.d.ts +1 -1
- package/dist/compat/types.d.ts.map +1 -1
- package/dist/components/PopMessages.d.ts +12 -0
- package/dist/components/PopMessages.d.ts.map +1 -0
- package/dist/components/PopMessages.js +45 -0
- package/dist/defaultConfig.d.ts +1 -0
- package/dist/defaultConfig.d.ts.map +1 -1
- package/dist/defaultConfig.js +2 -1
- package/dist/env/Interfaces.d.ts +2 -1
- package/dist/env/Interfaces.d.ts.map +1 -1
- package/dist/env/getEnvSchemas.d.ts +1 -1
- package/dist/env/getEnvSchemas.d.ts.map +1 -1
- package/dist/env/publicEnv.d.ts.map +1 -1
- package/dist/env/publicEnv.js +4 -1
- package/dist/frameworkConfigSchema.d.ts +4 -0
- package/dist/frameworkConfigSchema.d.ts.map +1 -1
- package/dist/frameworkConfigSchema.js +2 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/useInstance.d.ts +3 -0
- package/dist/hooks/useInstance.d.ts.map +1 -0
- package/dist/hooks/useInstance.js +4 -0
- package/dist/hydrate/hydrate.d.ts +6 -4
- package/dist/hydrate/hydrate.d.ts.map +1 -1
- package/dist/hydrate/hydrate.js +51 -13
- package/dist/hydrate/reconcileHydratedAttributes.d.ts.map +1 -1
- package/dist/hydrate/reconcileHydratedAttributes.js +4 -3
- package/dist/hydrate/renderHydrationMismatchBanner.d.ts +7 -0
- package/dist/hydrate/renderHydrationMismatchBanner.d.ts.map +1 -0
- package/dist/hydrate/renderHydrationMismatchBanner.js +69 -0
- package/dist/indexInner.d.ts +8 -0
- package/dist/indexInner.d.ts.map +1 -1
- package/dist/indexInner.js +7 -1
- package/dist/makeInstanceConfigFromFrameworkConfig.d.ts.map +1 -1
- package/dist/makeInstanceConfigFromFrameworkConfig.js +2 -1
- package/dist/pop.d.ts +10 -0
- package/dist/pop.d.ts.map +1 -0
- package/dist/pop.js +49 -0
- package/dist/rawHtml/filterContentNode.d.ts +20 -0
- package/dist/rawHtml/filterContentNode.d.ts.map +1 -0
- package/dist/rawHtml/filterContentNode.js +96 -0
- package/dist/rawHtml/parseHtml.d.ts +14 -0
- package/dist/rawHtml/parseHtml.d.ts.map +1 -1
- package/dist/rawHtml/parseHtml.js +4 -4
- package/dist/rawHtml/sanitizeHtml.d.ts +17 -0
- package/dist/rawHtml/sanitizeHtml.d.ts.map +1 -0
- package/dist/rawHtml/sanitizeHtml.js +19 -0
- package/dist/render/HeadData.d.ts +1 -0
- package/dist/render/HeadData.d.ts.map +1 -1
- package/dist/render/contentNodeToHtml.d.ts +18 -0
- package/dist/render/contentNodeToHtml.d.ts.map +1 -0
- package/dist/render/contentNodeToHtml.js +66 -0
- package/dist/render/contentToHtml.d.ts.map +1 -1
- package/dist/render/contentToHtml.js +2 -1
- package/dist/render/processHead.d.ts.map +1 -1
- package/dist/render/processHead.js +8 -2
- package/dist/render/renderingTreeToHtml.d.ts.map +1 -1
- package/dist/render/renderingTreeToHtml.js +8 -1
- package/dist/routing/ErrorRouteType.d.ts +6 -0
- package/dist/routing/ErrorRouteType.d.ts.map +1 -0
- package/dist/routing/ErrorRouteType.js +1 -0
- package/dist/routing/RouteTypes.d.ts +2 -1
- package/dist/routing/RouteTypes.d.ts.map +1 -1
- package/dist/routing/Routes.d.ts +5 -0
- package/dist/routing/Routes.d.ts.map +1 -1
- package/dist/routing/TungstenErrorInfo.d.ts +6 -0
- package/dist/routing/TungstenErrorInfo.d.ts.map +1 -0
- package/dist/routing/TungstenErrorInfo.js +6 -0
- package/dist/style/styleContentSxy.js +21 -0
- package/dist/testing/hydrateTestApp.d.ts +38 -0
- package/dist/testing/hydrateTestApp.d.ts.map +1 -0
- package/dist/testing/hydrateTestApp.js +242 -0
- package/dist/testing/index.d.ts +4 -3
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +16 -2
- package/dist/timeProfiler.d.ts +6 -0
- package/dist/timeProfiler.d.ts.map +1 -0
- package/dist/timeProfiler.js +31 -0
- package/dist/update/integrateUpdateVdom.d.ts +11 -0
- package/dist/update/integrateUpdateVdom.d.ts.map +1 -1
- package/dist/update/integrateUpdateVdom.js +9 -3
- package/dist/warnOnFrameworkChange.d.ts.map +1 -1
- package/dist/warnOnFrameworkChange.js +8 -8
- package/package.json +18 -16
- package/dist/FunctionComponentStandIn.sxyt.d.ts +0 -2
- package/dist/FunctionComponentStandIn.sxyt.d.ts.map +0 -1
- package/dist/FunctionComponentStandIn.sxyt.js +0 -52
- package/dist/Instance/gotoRedirect.sxyt.d.ts +0 -2
- package/dist/Instance/gotoRedirect.sxyt.d.ts.map +0 -1
- package/dist/Instance/gotoRedirect.sxyt.js +0 -148
- package/dist/Instance/runTrackedWork.sxyt.d.ts +0 -2
- package/dist/Instance/runTrackedWork.sxyt.d.ts.map +0 -1
- package/dist/Instance/runTrackedWork.sxyt.js +0 -35
- package/dist/Servers/devErrorPageAutoRetry.sxyt.d.ts +0 -2
- package/dist/Servers/devErrorPageAutoRetry.sxyt.d.ts.map +0 -1
- package/dist/Servers/devErrorPageAutoRetry.sxyt.js +0 -117
- package/dist/_client/cjsHelpers.sxyt.d.ts +0 -2
- package/dist/_client/cjsHelpers.sxyt.d.ts.map +0 -1
- package/dist/_client/cjsHelpers.sxyt.js +0 -45
- package/dist/auth/passwordHashing.sxyt.d.ts +0 -2
- package/dist/auth/passwordHashing.sxyt.d.ts.map +0 -1
- package/dist/auth/passwordHashing.sxyt.js +0 -46
- package/dist/auth/ref/checkPasswordResetToken.sxyt.d.ts +0 -2
- package/dist/auth/ref/checkPasswordResetToken.sxyt.d.ts.map +0 -1
- package/dist/auth/ref/checkPasswordResetToken.sxyt.js +0 -40
- package/dist/auth/ref/createPasswordResetToken.sxyt.d.ts +0 -2
- package/dist/auth/ref/createPasswordResetToken.sxyt.d.ts.map +0 -1
- package/dist/auth/ref/createPasswordResetToken.sxyt.js +0 -10
- package/dist/babelPlugins/BabelAddDevCacheBust.sxyt.d.ts +0 -2
- package/dist/babelPlugins/BabelAddDevCacheBust.sxyt.d.ts.map +0 -1
- package/dist/babelPlugins/BabelAddDevCacheBust.sxyt.js +0 -138
- package/dist/babelPlugins/fixImportsInSassErrorMessage.sxyt.d.ts +0 -2
- package/dist/babelPlugins/fixImportsInSassErrorMessage.sxyt.d.ts.map +0 -1
- package/dist/babelPlugins/fixImportsInSassErrorMessage.sxyt.js +0 -108
- package/dist/babelPlugins/transformPackageImports/resolveBareImport.sxyt.d.ts +0 -2
- package/dist/babelPlugins/transformPackageImports/resolveBareImport.sxyt.d.ts.map +0 -1
- package/dist/babelPlugins/transformPackageImports/resolveBareImport.sxyt.js +0 -104
- package/dist/bin/commands/compile.sxyt.d.ts +0 -2
- package/dist/bin/commands/compile.sxyt.d.ts.map +0 -1
- package/dist/bin/commands/compile.sxyt.js +0 -255
- package/dist/build/modifySassImports.sxyt.d.ts +0 -2
- package/dist/build/modifySassImports.sxyt.d.ts.map +0 -1
- package/dist/build/modifySassImports.sxyt.js +0 -55
- package/dist/build/sassImportParser.sxyt.d.ts +0 -2
- package/dist/build/sassImportParser.sxyt.d.ts.map +0 -1
- package/dist/build/sassImportParser.sxyt.js +0 -110
- package/dist/build/scssImportParserChatgpt.sxyt.d.ts +0 -2
- package/dist/build/scssImportParserChatgpt.sxyt.d.ts.map +0 -1
- package/dist/build/scssImportParserChatgpt.sxyt.js +0 -120
- package/dist/clone.sxyt.d.ts +0 -2
- package/dist/clone.sxyt.d.ts.map +0 -1
- package/dist/clone.sxyt.js +0 -24
- package/dist/componentProxyHandlers.sxyt.d.ts +0 -2
- package/dist/componentProxyHandlers.sxyt.d.ts.map +0 -1
- package/dist/componentProxyHandlers.sxyt.js +0 -130
- package/dist/components/RawHtml.sxyt.d.ts +0 -2
- package/dist/components/RawHtml.sxyt.d.ts.map +0 -1
- package/dist/components/RawHtml.sxyt.js +0 -104
- package/dist/components/bindable/BindableSelect.sxyt.d.ts +0 -2
- package/dist/components/bindable/BindableSelect.sxyt.d.ts.map +0 -1
- package/dist/components/bindable/BindableSelect.sxyt.js +0 -186
- package/dist/env/injectEnv.sxyt.d.ts +0 -2
- package/dist/env/injectEnv.sxyt.d.ts.map +0 -1
- package/dist/env/injectEnv.sxyt.js +0 -20
- package/dist/env/parseEnv.sxyt.d.ts +0 -2
- package/dist/env/parseEnv.sxyt.d.ts.map +0 -1
- package/dist/env/parseEnv.sxyt.js +0 -11
- package/dist/findProjectDir.sxyt.d.ts +0 -2
- package/dist/findProjectDir.sxyt.d.ts.map +0 -1
- package/dist/findProjectDir.sxyt.js +0 -82
- package/dist/hmr/applyHmrModule.sxyt.d.ts +0 -2
- package/dist/hmr/applyHmrModule.sxyt.d.ts.map +0 -1
- package/dist/hmr/applyHmrModule.sxyt.js +0 -182
- package/dist/hmr/instanceRegistry.sxyt.d.ts +0 -2
- package/dist/hmr/instanceRegistry.sxyt.d.ts.map +0 -1
- package/dist/hmr/instanceRegistry.sxyt.js +0 -24
- package/dist/hmr/refreshStylesheets.sxyt.d.ts +0 -2
- package/dist/hmr/refreshStylesheets.sxyt.d.ts.map +0 -1
- package/dist/hmr/refreshStylesheets.sxyt.js +0 -46
- package/dist/hydrate/hydrate.sxyt.d.ts +0 -2
- package/dist/hydrate/hydrate.sxyt.d.ts.map +0 -1
- package/dist/hydrate/hydrate.sxyt.js +0 -302
- package/dist/hydrate/reconcileHydratedAttributes.sxyt.d.ts +0 -2
- package/dist/hydrate/reconcileHydratedAttributes.sxyt.d.ts.map +0 -1
- package/dist/hydrate/reconcileHydratedAttributes.sxyt.js +0 -190
- package/dist/importDevModuleWithRetry.sxyt.d.ts +0 -2
- package/dist/importDevModuleWithRetry.sxyt.d.ts.map +0 -1
- package/dist/importDevModuleWithRetry.sxyt.js +0 -104
- package/dist/innerHtmlFromProps.sxyt.d.ts +0 -2
- package/dist/innerHtmlFromProps.sxyt.d.ts.map +0 -1
- package/dist/innerHtmlFromProps.sxyt.js +0 -99
- package/dist/postcssPlugins/parseSelectors.sxyt.d.ts +0 -2
- package/dist/postcssPlugins/parseSelectors.sxyt.d.ts.map +0 -1
- package/dist/postcssPlugins/parseSelectors.sxyt.js +0 -62
- package/dist/postcssPlugins/parseSelectorsRich.sxyt.d.ts +0 -2
- package/dist/postcssPlugins/parseSelectorsRich.sxyt.d.ts.map +0 -1
- package/dist/postcssPlugins/parseSelectorsRich.sxyt.js +0 -155
- package/dist/rawHtml/parseHtml.sxyt.d.ts +0 -2
- package/dist/rawHtml/parseHtml.sxyt.d.ts.map +0 -1
- package/dist/rawHtml/parseHtml.sxyt.js +0 -239
- package/dist/render/getFunctionBodyAsString.sxyt.d.ts +0 -2
- package/dist/render/getFunctionBodyAsString.sxyt.d.ts.map +0 -1
- package/dist/render/getFunctionBodyAsString.sxyt.js +0 -37
- package/dist/render/processHead.sxyt.d.ts +0 -2
- package/dist/render/processHead.sxyt.d.ts.map +0 -1
- package/dist/render/processHead.sxyt.js +0 -93
- package/dist/render/processProps.sxyt.d.ts +0 -2
- package/dist/render/processProps.sxyt.d.ts.map +0 -1
- package/dist/render/processProps.sxyt.js +0 -90
- package/dist/routing/compareRequestToRegex.sxyt.d.ts +0 -2
- package/dist/routing/compareRequestToRegex.sxyt.d.ts.map +0 -1
- package/dist/routing/compareRequestToRegex.sxyt.js +0 -65
- package/dist/routing/getPathPriority.sxyt.d.ts +0 -2
- package/dist/routing/getPathPriority.sxyt.d.ts.map +0 -1
- package/dist/routing/getPathPriority.sxyt.js +0 -24
- package/dist/routing/matchPath.sxyt.d.ts +0 -2
- package/dist/routing/matchPath.sxyt.d.ts.map +0 -1
- package/dist/routing/matchPath.sxyt.js +0 -41
- package/dist/routing/patternToRegex.sxyt.d.ts +0 -2
- package/dist/routing/patternToRegex.sxyt.d.ts.map +0 -1
- package/dist/routing/patternToRegex.sxyt.js +0 -69
- package/dist/routing/splitRequest.sxyt.d.ts +0 -2
- package/dist/routing/splitRequest.sxyt.d.ts.map +0 -1
- package/dist/routing/splitRequest.sxyt.js +0 -47
- package/dist/style/jssToCss.sxyt.d.ts +0 -2
- package/dist/style/jssToCss.sxyt.d.ts.map +0 -1
- package/dist/style/jssToCss.sxyt.js +0 -17
- package/dist/testing/createTestApp.sxyt.d.ts +0 -2
- package/dist/testing/createTestApp.sxyt.d.ts.map +0 -1
- package/dist/testing/createTestApp.sxyt.js +0 -470
- package/dist/testing/ensureTestEnvLoaded.sxyt.d.ts +0 -2
- package/dist/testing/ensureTestEnvLoaded.sxyt.d.ts.map +0 -1
- package/dist/testing/ensureTestEnvLoaded.sxyt.js +0 -20
- package/dist/update/hotSwap.sxyt.d.ts +0 -2
- package/dist/update/hotSwap.sxyt.d.ts.map +0 -1
- package/dist/update/hotSwap.sxyt.js +0 -252
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { describe } from 'sxy-test-runner';
|
|
2
|
-
import { modifySassImports } from "./modifySassImports.js";
|
|
3
|
-
import { sassImportParser } from "./sassImportParser.js";
|
|
4
|
-
describe('modifySassImports()', ({
|
|
5
|
-
it
|
|
6
|
-
}) => {
|
|
7
|
-
const input = `@import 'foo'`;
|
|
8
|
-
it(`modifies sass import 'foo' into 'C:/project/styles/foo' in content '${input}'`, () => {
|
|
9
|
-
//const imports = sassImportParser(input)
|
|
10
|
-
const imports = sassImportParser(input);
|
|
11
|
-
imports[0].to = '/project/styles/foo'; // eslint-disable-line no-type-assertion/no-type-assertion
|
|
12
|
-
console.log('imports', imports);
|
|
13
|
-
// const imports = [
|
|
14
|
-
// {
|
|
15
|
-
// target: 'foo',
|
|
16
|
-
// start: 9,
|
|
17
|
-
// to: 'C:/project/styles/foo'
|
|
18
|
-
// },
|
|
19
|
-
// ]
|
|
20
|
-
const result = modifySassImports(input, imports); // eslint-disable-line no-type-assertion/no-type-assertion
|
|
21
|
-
console.log('result', result);
|
|
22
|
-
result.should.equal(`@import '${imports[0].to}'`); // eslint-disable-line no-type-assertion/no-type-assertion
|
|
23
|
-
});
|
|
24
|
-
const input2 = `
|
|
25
|
-
@use 'foo' as bar
|
|
26
|
-
@import 'baz'
|
|
27
|
-
|
|
28
|
-
p
|
|
29
|
-
color: red
|
|
30
|
-
`;
|
|
31
|
-
it(`modifies 2 sass imports in content '${input2}'`, () => {
|
|
32
|
-
const imports = sassImportParser(input2);
|
|
33
|
-
imports[0].to = '/project/styles/foo' // eslint-disable-line no-type-assertion/no-type-assertion
|
|
34
|
-
;
|
|
35
|
-
imports[1].to = '/project/styles/baz'; // eslint-disable-line no-type-assertion/no-type-assertion
|
|
36
|
-
console.log('imports', imports);
|
|
37
|
-
// const imports = [
|
|
38
|
-
// {
|
|
39
|
-
// target: 'foo',
|
|
40
|
-
// start: 9,
|
|
41
|
-
// to: 'C:/project/styles/bar'
|
|
42
|
-
// },
|
|
43
|
-
// {
|
|
44
|
-
// target: 'baz',
|
|
45
|
-
// start: 19,
|
|
46
|
-
// to: 'C:/project/styles/foo'
|
|
47
|
-
// },
|
|
48
|
-
// ]
|
|
49
|
-
const result = modifySassImports(input2, imports); // eslint-disable-line no-type-assertion/no-type-assertion
|
|
50
|
-
console.log('result', result);
|
|
51
|
-
result.should.equal(input2.replace('foo', imports[0].to) // eslint-disable-line no-type-assertion/no-type-assertion
|
|
52
|
-
.replace('baz', imports[1].to) // eslint-disable-line no-type-assertion/no-type-assertion
|
|
53
|
-
);
|
|
54
|
-
});
|
|
55
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sassImportParser.sxyt.d.ts","sourceRoot":"","sources":["../../src/build/sassImportParser.sxyt.ts"],"names":[],"mappings":""}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import { describe } from 'sxy-test-runner';
|
|
2
|
-
import { sassImportParser } from "./sassImportParser.js";
|
|
3
|
-
describe('sassImportParser()', ({
|
|
4
|
-
it
|
|
5
|
-
}) => {
|
|
6
|
-
const input = `@import 'foo'`;
|
|
7
|
-
it(`parses out an import '${input}'`, () => {
|
|
8
|
-
const imports = sassImportParser(input);
|
|
9
|
-
const targets = Array.from(imports).map(x => x.target);
|
|
10
|
-
targets.should.deep.equal(['foo']);
|
|
11
|
-
});
|
|
12
|
-
const input2 = `@import 'foo'
|
|
13
|
-
@import 'bar'`;
|
|
14
|
-
it(`parses out 2 imports from '${input2}'`, () => {
|
|
15
|
-
const imports = sassImportParser(input2);
|
|
16
|
-
const targets = Array.from(imports).map(x => x.target);
|
|
17
|
-
targets.should.deep.equal(['foo', 'bar']);
|
|
18
|
-
});
|
|
19
|
-
const input3 = `
|
|
20
|
-
@import 'foo'
|
|
21
|
-
|
|
22
|
-
@import 'bar'
|
|
23
|
-
|
|
24
|
-
`;
|
|
25
|
-
it(`parses out 2 imports with spaces from '${input3}'`, () => {
|
|
26
|
-
const imports = sassImportParser(input3);
|
|
27
|
-
const targets = Array.from(imports).map(x => x.target);
|
|
28
|
-
targets.should.deep.equal(['foo', 'bar']);
|
|
29
|
-
});
|
|
30
|
-
const input4 = `
|
|
31
|
-
@import 'foo'
|
|
32
|
-
@import 'bar'
|
|
33
|
-
p::after
|
|
34
|
-
content: "@import 'baz'"
|
|
35
|
-
`;
|
|
36
|
-
it(`ignores extra imports within style values '${input4}'`, () => {
|
|
37
|
-
const imports = sassImportParser(input4);
|
|
38
|
-
const targets = Array.from(imports).map(x => x.target);
|
|
39
|
-
targets.should.deep.equal(['foo', 'bar']);
|
|
40
|
-
});
|
|
41
|
-
const input5 = `
|
|
42
|
-
@import 'foo'
|
|
43
|
-
@import 'bar'
|
|
44
|
-
// @import 'ignoreme'
|
|
45
|
-
/* @use 'ignoremetoo' */
|
|
46
|
-
/*
|
|
47
|
-
@use 'ignoremealso'
|
|
48
|
-
*/
|
|
49
|
-
@use 'baz'
|
|
50
|
-
`;
|
|
51
|
-
it(`ignores imports within comments in '${input5}'`, () => {
|
|
52
|
-
const imports = sassImportParser(input5);
|
|
53
|
-
const targets = Array.from(imports).map(x => x.target);
|
|
54
|
-
targets.should.deep.equal(['foo', 'bar', 'baz']);
|
|
55
|
-
});
|
|
56
|
-
const input6 = `
|
|
57
|
-
@import /* comment */ 'foo'
|
|
58
|
-
@import /* comment */'bar'
|
|
59
|
-
`;
|
|
60
|
-
it(`tolerates comments within @import and @use statements in '${input6}'`, () => {
|
|
61
|
-
const imports = sassImportParser(input6);
|
|
62
|
-
const targets = Array.from(imports).map(x => x.target);
|
|
63
|
-
targets.should.deep.equal(['foo', 'bar']);
|
|
64
|
-
});
|
|
65
|
-
const input7 = `
|
|
66
|
-
@import'foo'
|
|
67
|
-
@import/* comment */'bar'
|
|
68
|
-
`;
|
|
69
|
-
it(`does not require a space between @import / @use and the target using '${input7}'`, () => {
|
|
70
|
-
const imports = sassImportParser(input7);
|
|
71
|
-
const targets = Array.from(imports).map(x => x.target);
|
|
72
|
-
targets.should.deep.equal(['foo', 'bar']);
|
|
73
|
-
});
|
|
74
|
-
const input8 = `@import 'foo'`;
|
|
75
|
-
it(`returns a correct index for the start position when extracting from '${input8}'`, () => {
|
|
76
|
-
const imports = sassImportParser(input8);
|
|
77
|
-
Array.from(imports).should.deep.equal([{
|
|
78
|
-
target: 'foo',
|
|
79
|
-
start: 9
|
|
80
|
-
}]);
|
|
81
|
-
});
|
|
82
|
-
const input9 = `
|
|
83
|
-
|
|
84
|
-
@import 'bar'`;
|
|
85
|
-
it(`returns a correct index for the start position when extracting from '${input9}'`, () => {
|
|
86
|
-
const imports = sassImportParser(input9);
|
|
87
|
-
Array.from(imports).should.deep.equal([{
|
|
88
|
-
target: 'bar',
|
|
89
|
-
start: 15
|
|
90
|
-
}]);
|
|
91
|
-
});
|
|
92
|
-
const input10 = `@use 'foo' as bar`;
|
|
93
|
-
it(`handles aliasing in @use statements in '${input10}'`, () => {
|
|
94
|
-
const imports = sassImportParser(input10);
|
|
95
|
-
const targets = Array.from(imports).map(x => x.target);
|
|
96
|
-
targets.should.deep.equal(['foo']);
|
|
97
|
-
});
|
|
98
|
-
const input11 = `@use './foo' as bar`;
|
|
99
|
-
it(`extract relative targets from '${input11}'`, () => {
|
|
100
|
-
const imports = sassImportParser(input11);
|
|
101
|
-
const targets = Array.from(imports).map(x => x.target);
|
|
102
|
-
targets.should.deep.equal(['./foo']);
|
|
103
|
-
});
|
|
104
|
-
const input12 = `@use "foo" as bar`;
|
|
105
|
-
it(`handles double quotes in '${input12}'`, () => {
|
|
106
|
-
const imports = sassImportParser(input12);
|
|
107
|
-
const targets = Array.from(imports).map(x => x.target);
|
|
108
|
-
targets.should.deep.equal(['foo']);
|
|
109
|
-
});
|
|
110
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scssImportParserChatgpt.sxyt.d.ts","sourceRoot":"","sources":["../../src/build/scssImportParserChatgpt.sxyt.ts"],"names":[],"mappings":""}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import { describe } from 'sxy-test-runner';
|
|
2
|
-
import { scssImportParserChatgpt } from "./scssImportParserChatgpt.js";
|
|
3
|
-
describe('sassImportParser()', ({
|
|
4
|
-
it
|
|
5
|
-
}) => {
|
|
6
|
-
const input = `@import 'foo';`;
|
|
7
|
-
it(`parses out an import '${input}'`, () => {
|
|
8
|
-
const imports = scssImportParserChatgpt(input);
|
|
9
|
-
const targets = Array.from(imports).map(x => x.target);
|
|
10
|
-
targets.should.deep.equal(['foo']);
|
|
11
|
-
});
|
|
12
|
-
const input2 = `@import 'foo';
|
|
13
|
-
@import 'bar';`;
|
|
14
|
-
it(`parses out 2 imports from '${input2}'`, () => {
|
|
15
|
-
const imports = scssImportParserChatgpt(input2);
|
|
16
|
-
const targets = Array.from(imports).map(x => x.target);
|
|
17
|
-
targets.should.deep.equal(['foo', 'bar']);
|
|
18
|
-
});
|
|
19
|
-
const input3 = `
|
|
20
|
-
@import 'foo';
|
|
21
|
-
|
|
22
|
-
@import 'bar';
|
|
23
|
-
|
|
24
|
-
`;
|
|
25
|
-
it(`parses out 2 imports with spaces from '${input3}'`, () => {
|
|
26
|
-
const imports = scssImportParserChatgpt(input3);
|
|
27
|
-
const targets = Array.from(imports).map(x => x.target);
|
|
28
|
-
targets.should.deep.equal(['foo', 'bar']);
|
|
29
|
-
});
|
|
30
|
-
const input4 = `
|
|
31
|
-
@import 'foo';
|
|
32
|
-
@import 'bar';
|
|
33
|
-
p::after {
|
|
34
|
-
content: "@import 'baz'";
|
|
35
|
-
}
|
|
36
|
-
`;
|
|
37
|
-
it(`ignores extra imports within style values '${input4}'`, () => {
|
|
38
|
-
const imports = scssImportParserChatgpt(input4);
|
|
39
|
-
const targets = Array.from(imports).map(x => x.target);
|
|
40
|
-
targets.should.deep.equal(['foo', 'bar']);
|
|
41
|
-
});
|
|
42
|
-
const input5b = `
|
|
43
|
-
@import 'foo';
|
|
44
|
-
@import 'bar';
|
|
45
|
-
/* @use 'ignoremetoo'; */
|
|
46
|
-
@use 'baz';
|
|
47
|
-
`;
|
|
48
|
-
it(`ignores imports within comments in '${input5b}'`, () => {
|
|
49
|
-
const imports = scssImportParserChatgpt(input5b);
|
|
50
|
-
const targets = Array.from(imports).map(x => x.target);
|
|
51
|
-
targets.should.deep.equal(['foo', 'bar', 'baz']);
|
|
52
|
-
});
|
|
53
|
-
const input5c = `
|
|
54
|
-
@import 'foo';
|
|
55
|
-
@import 'bar';
|
|
56
|
-
/*
|
|
57
|
-
@use 'ignoremealso';
|
|
58
|
-
*/
|
|
59
|
-
@use 'baz';
|
|
60
|
-
`;
|
|
61
|
-
it(`ignores imports within comments in '${input5c}'`, () => {
|
|
62
|
-
const imports = scssImportParserChatgpt(input5c);
|
|
63
|
-
const targets = Array.from(imports).map(x => x.target);
|
|
64
|
-
targets.should.deep.equal(['foo', 'bar', 'baz']);
|
|
65
|
-
});
|
|
66
|
-
const input6 = `
|
|
67
|
-
@import /* comment */ 'foo';
|
|
68
|
-
@import /* comment */'bar';
|
|
69
|
-
`;
|
|
70
|
-
it(`tolerates comments within @import and @use statements in '${input6}'`, () => {
|
|
71
|
-
const imports = scssImportParserChatgpt(input6);
|
|
72
|
-
const targets = Array.from(imports).map(x => x.target);
|
|
73
|
-
targets.should.deep.equal(['foo', 'bar']);
|
|
74
|
-
});
|
|
75
|
-
const input7 = `
|
|
76
|
-
@import'foo';
|
|
77
|
-
@import/* comment */'bar';
|
|
78
|
-
`;
|
|
79
|
-
it(`does not require a space between @import / @use and the target using '${input7}'`, () => {
|
|
80
|
-
const imports = scssImportParserChatgpt(input7);
|
|
81
|
-
const targets = Array.from(imports).map(x => x.target);
|
|
82
|
-
targets.should.deep.equal(['foo', 'bar']);
|
|
83
|
-
});
|
|
84
|
-
const input8 = `@import 'foo';`;
|
|
85
|
-
it(`returns a correct index for the start position when extracting from '${input8}'`, () => {
|
|
86
|
-
const imports = scssImportParserChatgpt(input8);
|
|
87
|
-
Array.from(imports).should.deep.equal([{
|
|
88
|
-
target: 'foo',
|
|
89
|
-
start: 9
|
|
90
|
-
}]);
|
|
91
|
-
});
|
|
92
|
-
const input9 = `
|
|
93
|
-
|
|
94
|
-
@import 'bar';`;
|
|
95
|
-
it(`returns a correct index for the start position when extracting from '${input9}'`, () => {
|
|
96
|
-
const imports = scssImportParserChatgpt(input9);
|
|
97
|
-
Array.from(imports).should.deep.equal([{
|
|
98
|
-
target: 'bar',
|
|
99
|
-
start: 15
|
|
100
|
-
}]);
|
|
101
|
-
});
|
|
102
|
-
const input10 = `@use 'foo' as bar;`;
|
|
103
|
-
it(`handles aliasing in @use statements in '${input10}'`, () => {
|
|
104
|
-
const imports = scssImportParserChatgpt(input10);
|
|
105
|
-
const targets = Array.from(imports).map(x => x.target);
|
|
106
|
-
targets.should.deep.equal(['foo']);
|
|
107
|
-
});
|
|
108
|
-
const input11 = `@use './foo' as bar;`;
|
|
109
|
-
it(`extract relative targets from '${input11}'`, () => {
|
|
110
|
-
const imports = scssImportParserChatgpt(input11);
|
|
111
|
-
const targets = Array.from(imports).map(x => x.target);
|
|
112
|
-
targets.should.deep.equal(['./foo']);
|
|
113
|
-
});
|
|
114
|
-
const input12 = `@use "foo" as bar;`;
|
|
115
|
-
it(`handles double quotes in '${input12}'`, () => {
|
|
116
|
-
const imports = scssImportParserChatgpt(input12);
|
|
117
|
-
const targets = Array.from(imports).map(x => x.target);
|
|
118
|
-
targets.should.deep.equal(['foo']);
|
|
119
|
-
});
|
|
120
|
-
});
|
package/dist/clone.sxyt.d.ts
DELETED
package/dist/clone.sxyt.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clone.sxyt.d.ts","sourceRoot":"","sources":["../src/clone.sxyt.ts"],"names":[],"mappings":""}
|
package/dist/clone.sxyt.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { describe } from 'sxy-test-runner';
|
|
2
|
-
import { clone } from "./clone.js";
|
|
3
|
-
import { expect } from 'chai';
|
|
4
|
-
describe('clone()', ({
|
|
5
|
-
it
|
|
6
|
-
}) => {
|
|
7
|
-
it('clones an objects with symbols', () => {
|
|
8
|
-
const sym1 = Symbol(1);
|
|
9
|
-
const obj = {
|
|
10
|
-
a: 'a',
|
|
11
|
-
arr: [1, 2],
|
|
12
|
-
sub: {
|
|
13
|
-
[sym1]: 5,
|
|
14
|
-
sub2: {
|
|
15
|
-
foo: 'FOO'
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
const newObj = clone(obj);
|
|
20
|
-
expect(newObj).not.to.equal(obj);
|
|
21
|
-
expect(newObj.sub).not.to.equal(obj.sub);
|
|
22
|
-
expect(newObj).to.deep.equal(obj);
|
|
23
|
-
});
|
|
24
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"componentProxyHandlers.sxyt.d.ts","sourceRoot":"","sources":["../src/componentProxyHandlers.sxyt.ts"],"names":[],"mappings":""}
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
2
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
3
|
-
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
4
|
-
import { describe } from 'sxy-test-runner';
|
|
5
|
-
import { expect } from 'chai';
|
|
6
|
-
import { proxyObjectContent, getStateProxyHandler, $original, $ownerName } from "./componentProxyHandlers.js";
|
|
7
|
-
class FakeComponent {
|
|
8
|
-
constructor() {
|
|
9
|
-
_defineProperty(this, "__initialized", true);
|
|
10
|
-
_defineProperty(this, "updates", 0);
|
|
11
|
-
}
|
|
12
|
-
__stateUpdated() {
|
|
13
|
-
this.updates++;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
class ParentComp extends FakeComponent {}
|
|
17
|
-
class ChildComp extends FakeComponent {}
|
|
18
|
-
// proxyObjectContent proxies a state object's contents in place, the same entry point
|
|
19
|
-
// Components.__init uses, so state.<key> afterwards is a state-object proxy
|
|
20
|
-
function makeState(element, state) {
|
|
21
|
-
proxyObjectContent(element, state);
|
|
22
|
-
return state;
|
|
23
|
-
}
|
|
24
|
-
describe('componentProxyHandlers state adoption', ({
|
|
25
|
-
it
|
|
26
|
-
}) => {
|
|
27
|
-
it('exposes $original and $ownerName on state object proxies', () => {
|
|
28
|
-
const parent = new ParentComp();
|
|
29
|
-
const state = makeState(parent, {
|
|
30
|
-
data: {
|
|
31
|
-
x: 1
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
expect(state.data[$ownerName]).to.equal('ParentComp');
|
|
35
|
-
expect(state.data[$original]).to.deep.equal({
|
|
36
|
-
x: 1
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
it('adopts an object owned by another component as a copy instead of throwing', () => {
|
|
40
|
-
const parent = new ParentComp();
|
|
41
|
-
const parentState = makeState(parent, {
|
|
42
|
-
data: {
|
|
43
|
-
x: 1,
|
|
44
|
-
nested: {
|
|
45
|
-
y: 2
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
const child = new ChildComp();
|
|
50
|
-
const childState = makeState(child, {
|
|
51
|
-
data: parentState.data
|
|
52
|
-
});
|
|
53
|
-
expect(childState.data).to.not.equal(parentState.data);
|
|
54
|
-
expect(childState.data.x).to.equal(1);
|
|
55
|
-
expect(childState.data.nested.y).to.equal(2);
|
|
56
|
-
// the two components must not alias, at any depth
|
|
57
|
-
childState.data.x = 99;
|
|
58
|
-
childState.data.nested.y = 55;
|
|
59
|
-
expect(parentState.data.x).to.equal(1);
|
|
60
|
-
expect(parentState.data.nested.y).to.equal(2);
|
|
61
|
-
expect(parent.updates).to.equal(0);
|
|
62
|
-
expect(child.updates).to.be.greaterThan(0);
|
|
63
|
-
});
|
|
64
|
-
it('adopts via the top-level state set trap too', () => {
|
|
65
|
-
const parent = new ParentComp();
|
|
66
|
-
const parentState = makeState(parent, {
|
|
67
|
-
list: [1, {
|
|
68
|
-
deep: true
|
|
69
|
-
}]
|
|
70
|
-
});
|
|
71
|
-
const child = new ChildComp();
|
|
72
|
-
const childStateTarget = {
|
|
73
|
-
list: undefined
|
|
74
|
-
};
|
|
75
|
-
const childState = new Proxy(childStateTarget, getStateProxyHandler(child));
|
|
76
|
-
childState.list = parentState.list;
|
|
77
|
-
expect(childState.list).to.not.equal(parentState.list);
|
|
78
|
-
childState.list.push(2);
|
|
79
|
-
expect(childState.list.length).to.equal(3);
|
|
80
|
-
expect(parentState.list.length).to.equal(2);
|
|
81
|
-
});
|
|
82
|
-
it('preserves shared references within one state tree', () => {
|
|
83
|
-
const el = new ParentComp();
|
|
84
|
-
const shared = {
|
|
85
|
-
v: 1
|
|
86
|
-
};
|
|
87
|
-
const state = makeState(el, {
|
|
88
|
-
a: shared,
|
|
89
|
-
b: shared
|
|
90
|
-
});
|
|
91
|
-
expect(state.a).to.equal(state.b);
|
|
92
|
-
state.a.v = 2;
|
|
93
|
-
expect(state.b.v).to.equal(2);
|
|
94
|
-
});
|
|
95
|
-
it('terminates on self-referencing objects', () => {
|
|
96
|
-
const el = new ParentComp();
|
|
97
|
-
const cyc = {
|
|
98
|
-
n: 1
|
|
99
|
-
};
|
|
100
|
-
cyc.self = cyc;
|
|
101
|
-
const state = makeState(el, {
|
|
102
|
-
cyc
|
|
103
|
-
});
|
|
104
|
-
expect(state.cyc.self).to.equal(state.cyc);
|
|
105
|
-
expect(state.cyc.self.self.n).to.equal(1);
|
|
106
|
-
});
|
|
107
|
-
it('adopts Maps and Sets as copies', () => {
|
|
108
|
-
const parent = new ParentComp();
|
|
109
|
-
const parentState = makeState(parent, {
|
|
110
|
-
m: new Map([['k', 1]]),
|
|
111
|
-
s: new Set([1, 2])
|
|
112
|
-
});
|
|
113
|
-
const child = new ChildComp();
|
|
114
|
-
const childState = makeState(child, {
|
|
115
|
-
m: parentState.m,
|
|
116
|
-
s: parentState.s
|
|
117
|
-
});
|
|
118
|
-
childState.m.set('k', 2);
|
|
119
|
-
childState.s.add(3);
|
|
120
|
-
expect(parentState.m.get('k')).to.equal(1);
|
|
121
|
-
expect(parentState.s.has(3)).to.equal(false);
|
|
122
|
-
});
|
|
123
|
-
it('assigns a Map set into top-level state (missing assignment fix)', () => {
|
|
124
|
-
const el = new ParentComp();
|
|
125
|
-
const state = new Proxy({}, getStateProxyHandler(el));
|
|
126
|
-
state.m = new Map([['k', 1]]);
|
|
127
|
-
expect(state.m).to.not.equal(undefined);
|
|
128
|
-
expect(state.m.get('k')).to.equal(1);
|
|
129
|
-
});
|
|
130
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RawHtml.sxyt.d.ts","sourceRoot":"","sources":["../../src/components/RawHtml.sxyt.ts"],"names":[],"mappings":""}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { expect } from 'chai';
|
|
2
|
-
import { Window } from 'happy-dom';
|
|
3
|
-
import { describe } from 'sxy-test-runner';
|
|
4
|
-
import { RawHtml } from "./RawHtml.js";
|
|
5
|
-
import { createTestApp } from "../testing/index.js";
|
|
6
|
-
// Mounts RawHtml and returns the markup it actually put in the page. The parser
|
|
7
|
-
// itself is covered in rawHtml/parseHtml.sxyt.ts; what is under test here is
|
|
8
|
-
// that the component hands its props to the parser correctly.
|
|
9
|
-
const mount = async props => {
|
|
10
|
-
const window = new Window();
|
|
11
|
-
const testApp = await createTestApp(RawHtml, {
|
|
12
|
-
// eslint-disable-next-line no-type-assertion/no-type-assertion
|
|
13
|
-
document: window.document,
|
|
14
|
-
props
|
|
15
|
-
});
|
|
16
|
-
try {
|
|
17
|
-
return {
|
|
18
|
-
html: testApp.container.innerHTML,
|
|
19
|
-
text: testApp.container.textContent,
|
|
20
|
-
elements: testApp.container.querySelectorAll('*').length
|
|
21
|
-
};
|
|
22
|
-
} finally {
|
|
23
|
-
await testApp.unmount();
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
const render = async props => (await mount(props)).html;
|
|
27
|
-
describe('RawHtml', ({
|
|
28
|
-
it
|
|
29
|
-
}) => {
|
|
30
|
-
it('renders parsed markup as real elements', async () => {
|
|
31
|
-
const html = await render({
|
|
32
|
-
html: '<p>Bonuses for <strong>this month</strong>.</p>'
|
|
33
|
-
});
|
|
34
|
-
expect(html).to.contain('<p>');
|
|
35
|
-
expect(html).to.contain('<strong>this month</strong>');
|
|
36
|
-
});
|
|
37
|
-
it('renders nothing for empty markup', async () => {
|
|
38
|
-
// a component always leaves its delimiter comments behind, so the check
|
|
39
|
-
// is that it contributed no content, not that the container is empty
|
|
40
|
-
const {
|
|
41
|
-
text,
|
|
42
|
-
elements
|
|
43
|
-
} = await mount({
|
|
44
|
-
html: ''
|
|
45
|
-
});
|
|
46
|
-
expect(text).to.equal('');
|
|
47
|
-
expect(elements).to.equal(0);
|
|
48
|
-
});
|
|
49
|
-
it('drops scripts by default', async () => {
|
|
50
|
-
const html = await render({
|
|
51
|
-
html: '<p>a</p><script>alert(1)</script>'
|
|
52
|
-
});
|
|
53
|
-
expect(html).to.contain('<p>a</p>');
|
|
54
|
-
expect(html).to.not.contain('script');
|
|
55
|
-
expect(html).to.not.contain('alert');
|
|
56
|
-
});
|
|
57
|
-
it('keeps scripts when sanitizing is turned off', async () => {
|
|
58
|
-
expect(await render({
|
|
59
|
-
html: '<div><script>x()</script></div>',
|
|
60
|
-
sanitize: false
|
|
61
|
-
})).to.contain('<script>x()</script>');
|
|
62
|
-
});
|
|
63
|
-
// `safe` is the shortcut for Tungsten's built-in allow list
|
|
64
|
-
it('applies the built-in allow list when safe is set', async () => {
|
|
65
|
-
const html = await render({
|
|
66
|
-
html: '<p style="position:fixed">a</p><iframe src="//evil"></iframe>',
|
|
67
|
-
safe: true
|
|
68
|
-
});
|
|
69
|
-
expect(html).to.contain('a');
|
|
70
|
-
expect(html).to.not.contain('iframe');
|
|
71
|
-
// the safe list excludes style, which can disguise a page without script
|
|
72
|
-
expect(html).to.not.contain('position:fixed');
|
|
73
|
-
});
|
|
74
|
-
it('does not apply an allow list unless asked', async () => {
|
|
75
|
-
const html = await render({
|
|
76
|
-
html: '<p style="position:fixed">a</p>'
|
|
77
|
-
});
|
|
78
|
-
expect(html).to.contain('position:fixed');
|
|
79
|
-
});
|
|
80
|
-
it('lets an explicit allowList win over safe', async () => {
|
|
81
|
-
const onlyEmphasis = {
|
|
82
|
-
tags: ['em'],
|
|
83
|
-
attributes: []
|
|
84
|
-
};
|
|
85
|
-
// <strong> is on the safe list but not on this one, so if allowList is
|
|
86
|
-
// being applied it is unwrapped; if safe won, it would survive
|
|
87
|
-
const html = await render({
|
|
88
|
-
html: '<em>keep</em><strong>unwrap</strong>',
|
|
89
|
-
safe: true,
|
|
90
|
-
allowList: onlyEmphasis
|
|
91
|
-
});
|
|
92
|
-
expect(html).to.contain('<em>keep</em>');
|
|
93
|
-
expect(html).to.not.contain('<strong>');
|
|
94
|
-
expect(html).to.contain('unwrap');
|
|
95
|
-
});
|
|
96
|
-
it('renders whatever it is given without throwing', async () => {
|
|
97
|
-
const malformed = ['<p>unclosed', '</p>stray', '<p class="unterminated>x', '<<>>', '<!-- open'];
|
|
98
|
-
for (const html of malformed) {
|
|
99
|
-
expect(await render({
|
|
100
|
-
html
|
|
101
|
-
})).to.be.a('string');
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BindableSelect.sxyt.d.ts","sourceRoot":"","sources":["../../../src/components/bindable/BindableSelect.sxyt.tsx"],"names":[],"mappings":""}
|