ember-native 1.2.1 → 1.3.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/declarations/instance-initializers/webpack-hot-reload.d.ts +7 -0
- package/declarations/instance-initializers/webpack-hot-reload.d.ts.map +1 -0
- package/declarations/services/webpack-hot-reload.d.ts +14 -0
- package/declarations/services/webpack-hot-reload.d.ts.map +1 -0
- package/dist/_app_/instance-initializers/ember-native/webpack-hot-reload.js +1 -0
- package/dist/_app_/services/ember-native/webpack-hot-reload.js +1 -0
- package/dist/components/InspectorSupport.js.map +1 -1
- package/dist/components/ListView.js.map +1 -1
- package/dist/components/RadListView.js.map +1 -1
- package/dist/instance-initializers/webpack-hot-reload.js +18 -0
- package/dist/instance-initializers/webpack-hot-reload.js.map +1 -0
- package/dist/services/webpack-hot-reload.js +192 -0
- package/dist/services/webpack-hot-reload.js.map +1 -0
- package/dist/utils/babel-plugin.js +213 -0
- package/dist/utils/babel-plugin.ts +295 -0
- package/dist/utils/hmr-loader.js +53 -0
- package/dist/utils/tsconfig.json +14 -0
- package/package.json +10 -4
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import ApplicationInstance from '@ember/application/instance';
|
|
2
|
+
export declare function initialize(application: ApplicationInstance): void;
|
|
3
|
+
declare const _default: {
|
|
4
|
+
initialize: typeof initialize;
|
|
5
|
+
};
|
|
6
|
+
export default _default;
|
|
7
|
+
//# sourceMappingURL=webpack-hot-reload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webpack-hot-reload.d.ts","sourceRoot":"","sources":["../../src/instance-initializers/webpack-hot-reload.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,MAAM,6BAA6B,CAAC;AAgB9D,wBAAgB,UAAU,CAAC,WAAW,EAAE,mBAAmB,QAE1D;;;;AAED,wBAEE"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import Service from '@ember/service';
|
|
2
|
+
import RouterService from '@ember/routing/router-service';
|
|
3
|
+
export default class WebpackHotReload extends Service {
|
|
4
|
+
container: any;
|
|
5
|
+
router: RouterService;
|
|
6
|
+
constructor(...args: any);
|
|
7
|
+
getLatestChange(obj: any): any;
|
|
8
|
+
}
|
|
9
|
+
declare module '@ember/service' {
|
|
10
|
+
interface Registry {
|
|
11
|
+
'hot-reload': WebpackHotReload;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=webpack-hot-reload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webpack-hot-reload.d.ts","sourceRoot":"","sources":["../../src/services/webpack-hot-reload.ts"],"names":[],"mappings":"AAAA,OAAO,OAAoB,MAAM,gBAAgB,CAAC;AAElD,OAAO,aAAa,MAAM,+BAA+B,CAAC;AAiH1D,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,OAAO;IAC3C,SAAS,EAAE,GAAG,CAAC;IACZ,MAAM,EAAG,aAAa,CAAC;gBAEtB,GAAG,IAAI,EAAE,GAAG;IAkHxB,eAAe,CAAC,GAAG,EAAE,GAAG;CAGzB;AAMD,OAAO,QAAQ,gBAAgB,CAAC;IAC9B,UAAU,QAAQ;QAChB,YAAY,EAAE,gBAAgB,CAAC;KAChC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "ember-native/instance-initializers/webpack-hot-reload";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "ember-native/services/webpack-hot-reload";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InspectorSupport.js","sources":["../../src/components/InspectorSupport.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { modifier } from 'ember-modifier';\nimport ViewNode from '../dom/nodes/ViewNode.ts';\nimport NativeElementNode from '../dom/native/NativeElementNode.ts';\nimport DocumentNode from '../dom/nodes/DocumentNode.ts';\nimport type PageElement from '../dom/native/PageElement.ts';\n\nconst ref = modifier(function setRef(element: any, [context, key]: any) {\n // console.log('ref', element, context, key);\n context[key] = element;\n});\n\ninterface InspectorSupportInterface {\n Blocks: {\n default: [];\n };\n}\n\nexport default class InspectorSupport extends Component<InspectorSupportInterface> {\n declare highlight: NativeElementNode;\n declare tooltip: NativeElementNode;\n declare page: PageElement;\n declare ownerDocument: DocumentNode;\n setupInspector = () => {\n let i = setInterval(() => {\n const viewInspection =\n globalThis.EmberInspector?.viewDebug?.viewInspection;\n if (viewInspection && this.tooltip) {\n this.tooltip.querySelector = () => {\n return {\n style: {},\n };\n };\n viewInspection._showTooltip = () => {};\n const _showHighlight = viewInspection._showHighlight;\n viewInspection._hideHighlight = () => {\n this.highlight.setAttribute('visibility', 'collapse');\n };\n viewInspection._showHighlight = (node: ViewNode, rect: any) => {\n _showHighlight.call(this, node, rect);\n this.highlight.setAttribute('visibility', 'visible');\n const style = this.highlight.style as any;\n style.width = (style.width as any).value;\n style.height = (style.height as any).value;\n const pos = this.page.nativeView.getLocationInWindow() || {\n x: 0,\n y: 0,\n };\n this.highlight.setAttribute(\n 'left',\n Number(style.left!.replace('px', '')) - pos.x,\n );\n this.highlight.setAttribute(\n 'top',\n Number(style.top!.replace('px', '')) - pos.y,\n );\n };\n viewInspection.highlight = this.highlight;\n viewInspection.tooltip = this.tooltip;\n const id = viewInspection.id;\n\n viewInspection.highlight.id = `ember-inspector-highlight-${id}`;\n viewInspection.tooltip.id = `ember-inspector-tooltip-${id}`;\n clearInterval(i);\n }\n }, 1000);\n };\n\n setupHighlight = modifier(\n function setupHighlight(\n this: InspectorSupport,\n element: NativeElementNode,\n ) {\n this.highlight = element;\n this.highlight.setAttribute('visibility', 'collapse');\n this.ownerDocument = element.ownerDocument!;\n }.bind(this),\n );\n setupTooltip = modifier(\n function setupTooltip(this: InspectorSupport, element: NativeElementNode) {\n this.tooltip = element;\n this.tooltip.setAttribute('visibility', 'collapse');\n }.bind(this),\n );\n <template>\n <absolute-layout {{ref this 'page'}}>\n <html-view {{this.setupHighlight}} />\n <html-view {{this.setupTooltip}} zIndex='99' />\n {{(this.setupInspector)}}\n <content-view left='0' top='0' width='100%' height='100%'>\n <frame>\n {{yield}}\n </frame>\n </content-view>\n </absolute-layout>\n </template>\n}\n"],"names":["ref","modifier","setRef","element","context","key","InspectorSupport","Component","constructor","args","_defineProperty","setupInspector","i","setInterval","viewInspection","globalThis","EmberInspector","viewDebug","tooltip","querySelector","style","_showTooltip","_showHighlight","_hideHighlight","highlight","setAttribute","node","rect","call","width","value","height","pos","page","nativeView","getLocationInWindow","x","y","Number","left","replace","top","id","clearInterval","setupHighlight","ownerDocument","bind","setupTooltip","_InspectorSupport","
|
|
1
|
+
{"version":3,"file":"InspectorSupport.js","sources":["../../src/components/InspectorSupport.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { modifier } from 'ember-modifier';\nimport ViewNode from '../dom/nodes/ViewNode.ts';\nimport NativeElementNode from '../dom/native/NativeElementNode.ts';\nimport DocumentNode from '../dom/nodes/DocumentNode.ts';\nimport type PageElement from '../dom/native/PageElement.ts';\n\nconst ref = modifier(function setRef(element: any, [context, key]: any) {\n // console.log('ref', element, context, key);\n context[key] = element;\n});\n\ninterface InspectorSupportInterface {\n Blocks: {\n default: [];\n };\n}\n\nexport default class InspectorSupport extends Component<InspectorSupportInterface> {\n declare highlight: NativeElementNode;\n declare tooltip: NativeElementNode;\n declare page: PageElement;\n declare ownerDocument: DocumentNode;\n setupInspector = () => {\n let i = setInterval(() => {\n const viewInspection =\n globalThis.EmberInspector?.viewDebug?.viewInspection;\n if (viewInspection && this.tooltip) {\n this.tooltip.querySelector = () => {\n return {\n style: {},\n };\n };\n viewInspection._showTooltip = () => {};\n const _showHighlight = viewInspection._showHighlight;\n viewInspection._hideHighlight = () => {\n this.highlight.setAttribute('visibility', 'collapse');\n };\n viewInspection._showHighlight = (node: ViewNode, rect: any) => {\n _showHighlight.call(this, node, rect);\n this.highlight.setAttribute('visibility', 'visible');\n const style = this.highlight.style as any;\n style.width = (style.width as any).value;\n style.height = (style.height as any).value;\n const pos = this.page.nativeView.getLocationInWindow() || {\n x: 0,\n y: 0,\n };\n this.highlight.setAttribute(\n 'left',\n Number(style.left!.replace('px', '')) - pos.x,\n );\n this.highlight.setAttribute(\n 'top',\n Number(style.top!.replace('px', '')) - pos.y,\n );\n };\n viewInspection.highlight = this.highlight;\n viewInspection.tooltip = this.tooltip;\n const id = viewInspection.id;\n\n viewInspection.highlight.id = `ember-inspector-highlight-${id}`;\n viewInspection.tooltip.id = `ember-inspector-tooltip-${id}`;\n clearInterval(i);\n }\n }, 1000);\n };\n\n setupHighlight = modifier(\n function setupHighlight(\n this: InspectorSupport,\n element: NativeElementNode,\n ) {\n this.highlight = element;\n this.highlight.setAttribute('visibility', 'collapse');\n this.ownerDocument = element.ownerDocument!;\n }.bind(this),\n );\n setupTooltip = modifier(\n function setupTooltip(this: InspectorSupport, element: NativeElementNode) {\n this.tooltip = element;\n this.tooltip.setAttribute('visibility', 'collapse');\n }.bind(this),\n );\n <template>\n <absolute-layout {{ref this 'page'}}>\n <html-view {{this.setupHighlight}} />\n <html-view {{this.setupTooltip}} zIndex='99' />\n {{(this.setupInspector)}}\n <content-view left='0' top='0' width='100%' height='100%'>\n <frame>\n {{yield}}\n </frame>\n </content-view>\n </absolute-layout>\n </template>\n}\n"],"names":["ref","modifier","setRef","element","context","key","InspectorSupport","Component","constructor","args","_defineProperty","setupInspector","i","setInterval","viewInspection","globalThis","EmberInspector","viewDebug","tooltip","querySelector","style","_showTooltip","_showHighlight","_hideHighlight","highlight","setAttribute","node","rect","call","width","value","height","pos","page","nativeView","getLocationInWindow","x","y","Number","left","replace","top","id","clearInterval","setupHighlight","ownerDocument","bind","setupTooltip","_InspectorSupport","template_ab6b6176510c455d9eced5d85a79c850","strictMode","scope"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListView.js","sources":["../../src/components/ListView.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { modifier } from 'ember-modifier';\nimport type {\n ListView as NativeListView,\n StackLayout,\n} from '@nativescript/core';\nimport { tracked } from '@glimmer/tracking';\nimport NativeElementNode from '../dom/native/NativeElementNode.ts';\nimport DocumentNode from '../dom/nodes/DocumentNode.ts';\n\ninterface ListViewInterface<T> {\n Element: NativeElementNode<NativeListView>;\n Args: {\n items: T[];\n };\n Blocks: {\n item: [T | null];\n };\n}\n\ntype Ref<T> = {\n index: number;\n item: T | null;\n element: NativeElementNode<any>;\n};\n\nexport default class ListView<T> extends Component<ListViewInterface<T>> {\n @tracked elementRefs: Ref<T>[] = [];\n\n get items(): Ref<T>[] {\n return this.elementRefs.map(({ element, index }) => {\n return {\n index,\n item: this.args.items[index] || null,\n element,\n };\n });\n }\n\n cleanup(listView: NativeElementNode<NativeListView>) {\n for (const elementRef of this.elementRefs) {\n const n = elementRef.element.nativeView.nativeViewProtected;\n if (!n || !n.getWindowToken()) {\n elementRef.element.parentNode!.removeChild(elementRef.element);\n ((listView.nativeView as any)._realizedItems as any).delete(\n elementRef.element.nativeView,\n );\n }\n }\n this.elementRefs = this.elementRefs.filter(\n (e) => !!e.element.nativeView.nativeViewProtected?.getWindowToken(),\n ) as Ref<T>[];\n }\n\n setupListView = modifier(\n function setupListView(\n this: ListView<T>,\n listView: NativeElementNode<NativeListView>,\n ) {\n const listViewComponent = this;\n function _getDefaultItemContent(index: number) {\n listViewComponent.cleanup(listView);\n const sl = DocumentNode.createElement('stack-layout');\n listViewComponent.elementRefs.push({\n element: sl,\n item: null,\n index,\n });\n listViewComponent.elementRefs = [...listViewComponent.elementRefs];\n return sl.nativeView;\n }\n (listView.nativeView as any)._getDefaultItemContent =\n _getDefaultItemContent;\n (listView.nativeView as any)._prepareItem = (\n stackLayout: StackLayout,\n index: number,\n ) => {\n const ref = listViewComponent.elementRefs.find(\n (e) => e.element.nativeView === stackLayout,\n )!;\n ref.index = index;\n listViewComponent.elementRefs = [...listViewComponent.elementRefs];\n };\n }.bind(this),\n );\n\n <template>\n <list-view {{this.setupListView}} items={{@items}} ...attributes />\n {{#each this.items as |item|}}\n {{#in-element item.element}}\n {{yield item.item to='item'}}\n {{/in-element}}\n {{/each}}\n </template>\n}\n"],"names":["ListView","_class","_ListView","Component","constructor","args","_initializerDefineProperty","_descriptor","_defineProperty","modifier","setupListView","listView","listViewComponent","_getDefaultItemContent","index","cleanup","sl","DocumentNode","createElement","elementRefs","push","element","item","nativeView","_prepareItem","stackLayout","ref","find","e","bind","items","map","elementRef","n","nativeViewProtected","getWindowToken","parentNode","removeChild","_realizedItems","delete","filter","setComponentTemplate","
|
|
1
|
+
{"version":3,"file":"ListView.js","sources":["../../src/components/ListView.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { modifier } from 'ember-modifier';\nimport type {\n ListView as NativeListView,\n StackLayout,\n} from '@nativescript/core';\nimport { tracked } from '@glimmer/tracking';\nimport NativeElementNode from '../dom/native/NativeElementNode.ts';\nimport DocumentNode from '../dom/nodes/DocumentNode.ts';\n\ninterface ListViewInterface<T> {\n Element: NativeElementNode<NativeListView>;\n Args: {\n items: T[];\n };\n Blocks: {\n item: [T | null];\n };\n}\n\ntype Ref<T> = {\n index: number;\n item: T | null;\n element: NativeElementNode<any>;\n};\n\nexport default class ListView<T> extends Component<ListViewInterface<T>> {\n @tracked elementRefs: Ref<T>[] = [];\n\n get items(): Ref<T>[] {\n return this.elementRefs.map(({ element, index }) => {\n return {\n index,\n item: this.args.items[index] || null,\n element,\n };\n });\n }\n\n cleanup(listView: NativeElementNode<NativeListView>) {\n for (const elementRef of this.elementRefs) {\n const n = elementRef.element.nativeView.nativeViewProtected;\n if (!n || !n.getWindowToken()) {\n elementRef.element.parentNode!.removeChild(elementRef.element);\n ((listView.nativeView as any)._realizedItems as any).delete(\n elementRef.element.nativeView,\n );\n }\n }\n this.elementRefs = this.elementRefs.filter(\n (e) => !!e.element.nativeView.nativeViewProtected?.getWindowToken(),\n ) as Ref<T>[];\n }\n\n setupListView = modifier(\n function setupListView(\n this: ListView<T>,\n listView: NativeElementNode<NativeListView>,\n ) {\n const listViewComponent = this;\n function _getDefaultItemContent(index: number) {\n listViewComponent.cleanup(listView);\n const sl = DocumentNode.createElement('stack-layout');\n listViewComponent.elementRefs.push({\n element: sl,\n item: null,\n index,\n });\n listViewComponent.elementRefs = [...listViewComponent.elementRefs];\n return sl.nativeView;\n }\n (listView.nativeView as any)._getDefaultItemContent =\n _getDefaultItemContent;\n (listView.nativeView as any)._prepareItem = (\n stackLayout: StackLayout,\n index: number,\n ) => {\n const ref = listViewComponent.elementRefs.find(\n (e) => e.element.nativeView === stackLayout,\n )!;\n ref.index = index;\n listViewComponent.elementRefs = [...listViewComponent.elementRefs];\n };\n }.bind(this),\n );\n\n <template>\n <list-view {{this.setupListView}} items={{@items}} ...attributes />\n {{#each this.items as |item|}}\n {{#in-element item.element}}\n {{yield item.item to='item'}}\n {{/in-element}}\n {{/each}}\n </template>\n}\n"],"names":["ListView","_class","_ListView","Component","constructor","args","_initializerDefineProperty","_descriptor","_defineProperty","modifier","setupListView","listView","listViewComponent","_getDefaultItemContent","index","cleanup","sl","DocumentNode","createElement","elementRefs","push","element","item","nativeView","_prepareItem","stackLayout","ref","find","e","bind","items","map","elementRef","n","nativeViewProtected","getWindowToken","parentNode","removeChild","_realizedItems","delete","filter","setComponentTemplate","template_0a1c6e65ab754f1d9f3326942a14b273","strictMode","_applyDecoratedDescriptor","prototype","tracked"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadListView.js","sources":["../../src/components/RadListView.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { modifier } from 'ember-modifier';\nimport { tracked } from '@glimmer/tracking';\nimport {\n RadListView as NativeRadListView,\n ListViewViewType,\n} from 'nativescript-ui-listview';\nimport NativeElementNode from '../dom/native/NativeElementNode.ts';\nimport DocumentNode from '../dom/nodes/DocumentNode.ts';\nimport type { StackLayout } from '@nativescript/core';\n\nclass TrackedMap extends Map<any, any> {\n @tracked counter = 0;\n set(key: any, value: any): this {\n this.counter += 1;\n super.set(key, value);\n return this;\n }\n\n get(key: any): any {\n if (this.counter === 0) return null;\n return super.get(key);\n }\n\n entries(): any {\n if (this.counter === 0) return super.entries();\n return super.entries();\n }\n}\n\ninterface RadListViewInterface<T> {\n Element: NativeElementNode<NativeRadListView>;\n Args: {\n items: T[];\n };\n Blocks: {\n header: [];\n footer: [];\n item: [T];\n };\n}\n\nexport default class RadListView<T = any> extends Component<\n RadListViewInterface<T>\n> {\n elementRefs: TrackedMap = new TrackedMap();\n @tracked private listView: NativeElementNode<NativeRadListView> | undefined;\n private declare headerElement: NativeElementNode<StackLayout>;\n private declare footerElement: NativeElementNode<StackLayout>;\n\n get items() {\n return [...this.elementRefs.entries()].map(([element, item]) => {\n return {\n item,\n element,\n };\n });\n }\n\n setupListView = modifier(\n function setupListView(\n this: RadListView,\n listView: NativeElementNode<NativeRadListView>,\n ) {\n this.listView = listView;\n const listViewComponent = this;\n function _getDefaultItemContent() {\n const sl = DocumentNode.createElement('stack-layout');\n Object.defineProperty(sl.nativeView, 'parent', {\n get() {\n return this._parent;\n },\n set(v: any) {\n this._parent = v;\n Object.defineProperty(v, 'bindingContext', {\n get() {\n return listViewComponent.elementRefs.get(sl);\n },\n set(v: any) {\n listViewComponent.elementRefs.set(sl, v);\n },\n });\n },\n });\n return sl.nativeView;\n }\n listView.nativeView.itemViewLoader = (type) => {\n switch (type) {\n case ListViewViewType.ItemView:\n return _getDefaultItemContent();\n case ListViewViewType.HeaderView:\n return this.headerElement.nativeView;\n case ListViewViewType.FooterView:\n return this.footerElement.nativeView;\n }\n return DocumentNode.createElement('stack-layout').nativeView;\n };\n }.bind(this),\n );\n\n setupHeader = () => {\n this.headerElement = DocumentNode.createElement('stack-layout');\n };\n\n setupFooter = () => {\n this.footerElement = DocumentNode.createElement('stack-layout');\n };\n\n <template>\n <rad-list-view {{this.setupListView}} items={{@items}} ...attributes />\n {{#if this.listView}}\n {{#if (has-block 'header')}}\n {{this.setupHeader}}\n {{#in-element this.headerElement}}\n {{yield to='header'}}\n {{/in-element}}\n {{/if}}\n {{#each this.items as |item|}}\n {{#in-element item.element}}\n {{yield item.item to='item'}}\n {{/in-element}}\n {{/each}}\n {{#if (has-block 'footer')}}\n {{this.setupFooter}}\n {{#in-element this.footerElement}}\n {{yield to='footer'}}\n {{/in-element}}\n {{/if}}\n {{/if}}\n </template>\n}\n"],"names":["TrackedMap","_class","Map","constructor","args","_initializerDefineProperty","_descriptor","set","key","value","counter","get","entries","_applyDecoratedDescriptor","prototype","tracked","RadListView","_class2","_RadListView","Component","_defineProperty","_descriptor2","modifier","setupListView","listView","listViewComponent","_getDefaultItemContent","sl","DocumentNode","createElement","Object","defineProperty","nativeView","_parent","v","elementRefs","itemViewLoader","type","ListViewViewType","ItemView","HeaderView","headerElement","FooterView","footerElement","bind","setupHeader","setupFooter","items","map","element","item","setComponentTemplate","
|
|
1
|
+
{"version":3,"file":"RadListView.js","sources":["../../src/components/RadListView.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { modifier } from 'ember-modifier';\nimport { tracked } from '@glimmer/tracking';\nimport {\n RadListView as NativeRadListView,\n ListViewViewType,\n} from 'nativescript-ui-listview';\nimport NativeElementNode from '../dom/native/NativeElementNode.ts';\nimport DocumentNode from '../dom/nodes/DocumentNode.ts';\nimport type { StackLayout } from '@nativescript/core';\n\nclass TrackedMap extends Map<any, any> {\n @tracked counter = 0;\n set(key: any, value: any): this {\n this.counter += 1;\n super.set(key, value);\n return this;\n }\n\n get(key: any): any {\n if (this.counter === 0) return null;\n return super.get(key);\n }\n\n entries(): any {\n if (this.counter === 0) return super.entries();\n return super.entries();\n }\n}\n\ninterface RadListViewInterface<T> {\n Element: NativeElementNode<NativeRadListView>;\n Args: {\n items: T[];\n };\n Blocks: {\n header: [];\n footer: [];\n item: [T];\n };\n}\n\nexport default class RadListView<T = any> extends Component<\n RadListViewInterface<T>\n> {\n elementRefs: TrackedMap = new TrackedMap();\n @tracked private listView: NativeElementNode<NativeRadListView> | undefined;\n private declare headerElement: NativeElementNode<StackLayout>;\n private declare footerElement: NativeElementNode<StackLayout>;\n\n get items() {\n return [...this.elementRefs.entries()].map(([element, item]) => {\n return {\n item,\n element,\n };\n });\n }\n\n setupListView = modifier(\n function setupListView(\n this: RadListView,\n listView: NativeElementNode<NativeRadListView>,\n ) {\n this.listView = listView;\n const listViewComponent = this;\n function _getDefaultItemContent() {\n const sl = DocumentNode.createElement('stack-layout');\n Object.defineProperty(sl.nativeView, 'parent', {\n get() {\n return this._parent;\n },\n set(v: any) {\n this._parent = v;\n Object.defineProperty(v, 'bindingContext', {\n get() {\n return listViewComponent.elementRefs.get(sl);\n },\n set(v: any) {\n listViewComponent.elementRefs.set(sl, v);\n },\n });\n },\n });\n return sl.nativeView;\n }\n listView.nativeView.itemViewLoader = (type) => {\n switch (type) {\n case ListViewViewType.ItemView:\n return _getDefaultItemContent();\n case ListViewViewType.HeaderView:\n return this.headerElement.nativeView;\n case ListViewViewType.FooterView:\n return this.footerElement.nativeView;\n }\n return DocumentNode.createElement('stack-layout').nativeView;\n };\n }.bind(this),\n );\n\n setupHeader = () => {\n this.headerElement = DocumentNode.createElement('stack-layout');\n };\n\n setupFooter = () => {\n this.footerElement = DocumentNode.createElement('stack-layout');\n };\n\n <template>\n <rad-list-view {{this.setupListView}} items={{@items}} ...attributes />\n {{#if this.listView}}\n {{#if (has-block 'header')}}\n {{this.setupHeader}}\n {{#in-element this.headerElement}}\n {{yield to='header'}}\n {{/in-element}}\n {{/if}}\n {{#each this.items as |item|}}\n {{#in-element item.element}}\n {{yield item.item to='item'}}\n {{/in-element}}\n {{/each}}\n {{#if (has-block 'footer')}}\n {{this.setupFooter}}\n {{#in-element this.footerElement}}\n {{yield to='footer'}}\n {{/in-element}}\n {{/if}}\n {{/if}}\n </template>\n}\n"],"names":["TrackedMap","_class","Map","constructor","args","_initializerDefineProperty","_descriptor","set","key","value","counter","get","entries","_applyDecoratedDescriptor","prototype","tracked","RadListView","_class2","_RadListView","Component","_defineProperty","_descriptor2","modifier","setupListView","listView","listViewComponent","_getDefaultItemContent","sl","DocumentNode","createElement","Object","defineProperty","nativeView","_parent","v","elementRefs","itemViewLoader","type","ListViewViewType","ItemView","HeaderView","headerElement","FooterView","footerElement","bind","setupHeader","setupFooter","items","map","element","item","setComponentTemplate","template_c4e31b367741495e8912ec67552addc2","strictMode"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
function patchResolver(application) {
|
|
2
|
+
application.__container__.lookup('service:vite-hot-reload');
|
|
3
|
+
const resolver = application.__registry__.resolver?._fallback || (application.__registry__.fallback?.resolver)._fallback || application.__registry__.fallback?.resolver || application.__registry__.resolver;
|
|
4
|
+
const resolverResolve = resolver.resolve;
|
|
5
|
+
resolver.resolve = function (name) {
|
|
6
|
+
name = name.replace(/--hot-version--.*$/, '');
|
|
7
|
+
return resolverResolve.call(this, name);
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
function initialize(application) {
|
|
11
|
+
patchResolver(application);
|
|
12
|
+
}
|
|
13
|
+
var webpackHotReload = {
|
|
14
|
+
initialize
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export { webpackHotReload as default, initialize };
|
|
18
|
+
//# sourceMappingURL=webpack-hot-reload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webpack-hot-reload.js","sources":["../../src/instance-initializers/webpack-hot-reload.ts"],"sourcesContent":["import ApplicationInstance from '@ember/application/instance';\n\nfunction patchResolver(application: ApplicationInstance) {\n application.__container__.lookup('service:vite-hot-reload');\n const resolver =\n (application.__registry__.resolver as any)?._fallback ||\n (application.__registry__.fallback?.resolver as any)._fallback ||\n (application.__registry__.fallback?.resolver as any) ||\n application.__registry__.resolver;\n const resolverResolve = resolver.resolve;\n resolver.resolve = function (name: string) {\n name = name.replace(/--hot-version--.*$/, '');\n return resolverResolve.call(this, name);\n };\n}\n\nexport function initialize(application: ApplicationInstance) {\n patchResolver(application);\n}\n\nexport default {\n initialize,\n};\n"],"names":["patchResolver","application","__container__","lookup","resolver","__registry__","_fallback","fallback","resolverResolve","resolve","name","replace","call","initialize"],"mappings":"AAEA,SAASA,aAAaA,CAACC,WAAgC,EAAE;AACvDA,EAAAA,WAAW,CAACC,aAAa,CAACC,MAAM,CAAC,yBAAyB,CAAC;AAC3D,EAAA,MAAMC,QAAQ,GACXH,WAAW,CAACI,YAAY,CAACD,QAAQ,EAAUE,SAAS,IACrD,CAACL,WAAW,CAACI,YAAY,CAACE,QAAQ,EAAEH,QAAQ,EAASE,SAAS,IAC7DL,WAAW,CAACI,YAAY,CAACE,QAAQ,EAAEH,QAAgB,IACpDH,WAAW,CAACI,YAAY,CAACD,QAAQ;AACnC,EAAA,MAAMI,eAAe,GAAGJ,QAAQ,CAACK,OAAO;AACxCL,EAAAA,QAAQ,CAACK,OAAO,GAAG,UAAUC,IAAY,EAAE;IACzCA,IAAI,GAAGA,IAAI,CAACC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;AAC7C,IAAA,OAAOH,eAAe,CAACI,IAAI,CAAC,IAAI,EAAEF,IAAI,CAAC;GACxC;AACH;AAEO,SAASG,UAAUA,CAACZ,WAAgC,EAAE;EAC3DD,aAAa,CAACC,WAAW,CAAC;AAC5B;AAEA,uBAAe;AACbY,EAAAA;AACF,CAAC;;;;"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { a as _applyDecoratedDescriptor, b as _initializerDefineProperty } from '../_rollupPluginBabelHelpers-DZQzmiRH.js';
|
|
2
|
+
import Service, { service } from '@ember/service';
|
|
3
|
+
import { getOwner } from '@ember/owner';
|
|
4
|
+
import Router from '@ember/routing/route';
|
|
5
|
+
import Controller from '@ember/controller';
|
|
6
|
+
|
|
7
|
+
var _dec, _class, _descriptor;
|
|
8
|
+
const ChangeMap = new WeakMap();
|
|
9
|
+
function getLatestChange(obj) {
|
|
10
|
+
while (ChangeMap.has(obj)) {
|
|
11
|
+
obj = ChangeMap.get(obj);
|
|
12
|
+
}
|
|
13
|
+
return obj;
|
|
14
|
+
}
|
|
15
|
+
let modulePrefix;
|
|
16
|
+
let podModulePrefix;
|
|
17
|
+
if (module.hot) {
|
|
18
|
+
const ModuleMap = new Map();
|
|
19
|
+
window.emberHotReloadPlugin = {
|
|
20
|
+
Resolver: null,
|
|
21
|
+
_accepting: 0,
|
|
22
|
+
changed: {},
|
|
23
|
+
subscribers: [],
|
|
24
|
+
version: 1,
|
|
25
|
+
routerVersion: 1,
|
|
26
|
+
moduleDepCallbacks: {},
|
|
27
|
+
versionMap: {},
|
|
28
|
+
clear(module) {
|
|
29
|
+
this.moduleDepCallbacks[module.id] = {};
|
|
30
|
+
},
|
|
31
|
+
register(module, dep, callback) {
|
|
32
|
+
dep = dep.replace(new RegExp(`^${modulePrefix}/`), './');
|
|
33
|
+
this.moduleDepCallbacks[module.id][dep] = this.moduleDepCallbacks[module.id][dep] || [];
|
|
34
|
+
this.moduleDepCallbacks[module.id][dep].push(callback);
|
|
35
|
+
},
|
|
36
|
+
loadNew(oldModule, newModule) {
|
|
37
|
+
ModuleMap.set(newModule.id, newModule);
|
|
38
|
+
this.versionMap[newModule.id] = newModule.version;
|
|
39
|
+
const entry = Object.entries(this.Resolver.explicitModules).find(([_name, module]) => module.default === oldModule.exports.default);
|
|
40
|
+
if (!entry) return;
|
|
41
|
+
this.Resolver.explicitModules[entry[0]] = newModule.exports;
|
|
42
|
+
},
|
|
43
|
+
__import(moduleUrl) {
|
|
44
|
+
return import(/* @vite-ignore */moduleUrl);
|
|
45
|
+
},
|
|
46
|
+
async canAcceptNew(moduleUrl) {
|
|
47
|
+
this._accepting += 1;
|
|
48
|
+
const m = await this.__import(moduleUrl);
|
|
49
|
+
const module = {
|
|
50
|
+
exports: m,
|
|
51
|
+
id: moduleUrl.split('?')[0].replace(/http:\/\/.*:[^/]*\//, ''),
|
|
52
|
+
version: 0
|
|
53
|
+
};
|
|
54
|
+
this._accepting -= 1;
|
|
55
|
+
if (this._accepting === 0) {
|
|
56
|
+
setTimeout(() => this.notifyNew(), 0);
|
|
57
|
+
}
|
|
58
|
+
const ok = module.id.includes('/routes/') || module.id.includes('/routers/') || module.id.includes('/controllers/') || module.id.includes('/templates/') || module.id.match(/controller\.(js|ts)$/) || module.id.match(/route\.(js|ts|gts)$/);
|
|
59
|
+
if (!ok) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
if (module.id.includes('templates') && module.id.includes('components')) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
if (ModuleMap.get(module.id)) {
|
|
66
|
+
this.changed[module.id] = {
|
|
67
|
+
old: ModuleMap.get(module.id),
|
|
68
|
+
new: module
|
|
69
|
+
};
|
|
70
|
+
} else {
|
|
71
|
+
ModuleMap.set(module.id, module);
|
|
72
|
+
}
|
|
73
|
+
module.version = this.version;
|
|
74
|
+
return true;
|
|
75
|
+
},
|
|
76
|
+
notifyNew() {
|
|
77
|
+
this.version += 1;
|
|
78
|
+
Object.values(this.changed).forEach(change => {
|
|
79
|
+
this.loadNew(change.old, change.new);
|
|
80
|
+
this.subscribers.forEach(fn => fn(change.old, change.new));
|
|
81
|
+
});
|
|
82
|
+
this.changed = {};
|
|
83
|
+
},
|
|
84
|
+
subscribe(fn) {
|
|
85
|
+
this.subscribers.push(fn);
|
|
86
|
+
},
|
|
87
|
+
unsubscribe(fn) {
|
|
88
|
+
const idx = this.subscribers.indexOf(fn);
|
|
89
|
+
if (idx >= 0) {
|
|
90
|
+
this.subscribers.splice(idx, 1);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
let WebpackHotReload = (_dec = service(), _class = class WebpackHotReload extends Service {
|
|
96
|
+
constructor(...args) {
|
|
97
|
+
super(...args);
|
|
98
|
+
_initializerDefineProperty(this, "router", _descriptor, this);
|
|
99
|
+
if (!window.emberHotReloadPlugin) return;
|
|
100
|
+
const app = getOwner(this).application;
|
|
101
|
+
window.emberHotReloadPlugin.Resolver = app.Resolver;
|
|
102
|
+
modulePrefix = app.modulePrefix;
|
|
103
|
+
podModulePrefix = app.podModulePrefix;
|
|
104
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
105
|
+
this.router._router;
|
|
106
|
+
// eslint-disable-next-line ember/no-private-routing-service
|
|
107
|
+
Object.defineProperty(this.router._router, '_routerMicrolib', {
|
|
108
|
+
set(v) {
|
|
109
|
+
const getRoute = v.getRoute;
|
|
110
|
+
v.getRoute = function (name) {
|
|
111
|
+
const route = getRoute.call(this, `${name}--hot-version--${window.emberHotReloadPlugin.routerVersion}`);
|
|
112
|
+
route.fullRouteName = `route:${name}`.replace(/--hot-version--.*$/, '');
|
|
113
|
+
return route;
|
|
114
|
+
};
|
|
115
|
+
this.___routerMicrolib = v;
|
|
116
|
+
},
|
|
117
|
+
get() {
|
|
118
|
+
return this.___routerMicrolib;
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
this.container = getOwner(this)?.__container__;
|
|
122
|
+
window.emberHotReloadPlugin.subscribe((oldModule, _newModule) => {
|
|
123
|
+
let changed = false;
|
|
124
|
+
if (oldModule.exports.default?.prototype && oldModule.exports.default.prototype instanceof Router) {
|
|
125
|
+
changed = true;
|
|
126
|
+
}
|
|
127
|
+
if (oldModule.exports.default?.prototype && oldModule.exports.default.prototype instanceof Controller) {
|
|
128
|
+
changed = true;
|
|
129
|
+
}
|
|
130
|
+
if (oldModule.id.startsWith('app/templates/') && !oldModule.id.startsWith('app/templates/components/')) {
|
|
131
|
+
changed = true;
|
|
132
|
+
}
|
|
133
|
+
if (oldModule.id.startsWith(`./${podModulePrefix}/`)) {
|
|
134
|
+
changed = true;
|
|
135
|
+
}
|
|
136
|
+
if (!changed) return;
|
|
137
|
+
window.emberHotReloadPlugin.routerVersion += 1;
|
|
138
|
+
const types = ['route', 'controller', 'template', 'modifier', 'helper', 'component'];
|
|
139
|
+
Object.keys(this.container.cache).forEach(k => {
|
|
140
|
+
if (types.some(t => k.startsWith(`${t}:`))) {
|
|
141
|
+
delete this.container.cache[k];
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
Object.keys(this.container.factoryManagerCache).forEach(k => {
|
|
145
|
+
if (types.some(t => k.startsWith(`${t}:`))) {
|
|
146
|
+
delete this.container.factoryManagerCache[k];
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
Object.keys(this.container.registry._resolveCache).forEach(k => {
|
|
150
|
+
if (types.some(t => k.startsWith(`${t}:`))) {
|
|
151
|
+
delete this.container.registry._resolveCache[k];
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
Object.keys(this.container.validationCache).forEach(k => {
|
|
155
|
+
if (types.some(t => k.startsWith(`${t}:`))) {
|
|
156
|
+
delete this.container.validationCache[k];
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
Object.keys(this.container.registry.registrations).forEach(k => {
|
|
160
|
+
if (types.some(t => k.startsWith(`${t}:`))) {
|
|
161
|
+
delete this.container.registry.registrations[k];
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
if (oldModule.exports.default?.prototype && oldModule.exports.default.prototype instanceof Router) {
|
|
165
|
+
this.router.refresh();
|
|
166
|
+
}
|
|
167
|
+
if (oldModule.exports.default?.prototype && oldModule.exports.default.prototype instanceof Controller) {
|
|
168
|
+
this.router.refresh();
|
|
169
|
+
}
|
|
170
|
+
if (oldModule.id.startsWith('app/templates/') && !oldModule.id.startsWith('app/templates/components/')) {
|
|
171
|
+
this.router.refresh();
|
|
172
|
+
}
|
|
173
|
+
if (oldModule.id.startsWith(`./${podModulePrefix}/`)) {
|
|
174
|
+
this.router.refresh();
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
getLatestChange(obj) {
|
|
179
|
+
return getLatestChange(obj);
|
|
180
|
+
}
|
|
181
|
+
}, _descriptor = _applyDecoratedDescriptor(_class.prototype, "router", [_dec], {
|
|
182
|
+
configurable: true,
|
|
183
|
+
enumerable: true,
|
|
184
|
+
writable: true,
|
|
185
|
+
initializer: null
|
|
186
|
+
}), _class);
|
|
187
|
+
// this service using `Owner.lookup('service:hot-reload')`, as well
|
|
188
|
+
// as to check when you pass the service name as an argument to the decorator,
|
|
189
|
+
// like `@service('hot-reload') declare altName: HotReloadService;`.
|
|
190
|
+
|
|
191
|
+
export { WebpackHotReload as default };
|
|
192
|
+
//# sourceMappingURL=webpack-hot-reload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webpack-hot-reload.js","sources":["../../src/services/webpack-hot-reload.ts"],"sourcesContent":["import Service, { service } from '@ember/service';\nimport { getOwner } from '@ember/owner';\nimport RouterService from '@ember/routing/router-service';\nimport Router from '@ember/routing/route';\nimport Controller from '@ember/controller';\nimport ApplicationInstance from '@ember/application/instance';\n\ntype Module = any;\ntype AnyFunction = (...args: any) => any;\n\nconst ChangeMap = new WeakMap();\n\nfunction getLatestChange(obj: any) {\n while (ChangeMap.has(obj)) {\n obj = ChangeMap.get(obj);\n }\n return obj;\n}\n\nlet modulePrefix!: string;\nlet podModulePrefix!: string;\nif ((module as any).hot) {\n const ModuleMap = new Map();\n\n (window as any).emberHotReloadPlugin = {\n Resolver: null,\n _accepting: 0,\n changed: {},\n subscribers: [],\n version: 1,\n routerVersion: 1,\n moduleDepCallbacks: {},\n versionMap: {},\n\n clear(module: Module) {\n this.moduleDepCallbacks[module.id] = {};\n },\n register(module: Module, dep: string, callback: AnyFunction) {\n dep = dep.replace(new RegExp(`^${modulePrefix}/`), './');\n this.moduleDepCallbacks[module.id]![dep] =\n this.moduleDepCallbacks[module.id]![dep] || ([] as AnyFunction[]);\n this.moduleDepCallbacks[module.id]![dep]!.push(callback);\n },\n loadNew(oldModule: Module, newModule: Module) {\n ModuleMap.set(newModule.id, newModule);\n this.versionMap[newModule.id] = newModule.version;\n const entry = Object.entries(\n this.Resolver.explicitModules as Record<string, any>,\n ).find(([_name, module]) => module.default === oldModule.exports.default);\n if (!entry) return;\n this.Resolver.explicitModules[entry[0]] = newModule.exports;\n },\n\n __import(moduleUrl: string) {\n return import(/* @vite-ignore */ moduleUrl);\n },\n\n async canAcceptNew(moduleUrl: string) {\n this._accepting += 1;\n const m = await this.__import(moduleUrl);\n const module: Module = {\n exports: m,\n id: moduleUrl.split('?')[0]!.replace(/http:\\/\\/.*:[^/]*\\//, ''),\n version: 0,\n };\n this._accepting -= 1;\n if (this._accepting === 0) {\n setTimeout(() => this.notifyNew(), 0);\n }\n const ok =\n module.id.includes('/routes/') ||\n module.id.includes('/routers/') ||\n module.id.includes('/controllers/') ||\n module.id.includes('/templates/') ||\n module.id.match(/controller\\.(js|ts)$/) ||\n module.id.match(/route\\.(js|ts|gts)$/);\n if (!ok) {\n return false;\n }\n\n if (module.id.includes('templates') && module.id.includes('components')) {\n return false;\n }\n\n if (ModuleMap.get(module.id)) {\n this.changed[module.id] = {\n old: ModuleMap.get(module.id),\n new: module,\n };\n } else {\n ModuleMap.set(module.id, module);\n }\n module.version = this.version;\n return true;\n },\n notifyNew() {\n this.version += 1;\n Object.values(this.changed).forEach((change: any) => {\n this.loadNew(change.old, change.new);\n this.subscribers.forEach((fn: any) => fn(change.old, change.new));\n });\n this.changed = {};\n },\n subscribe(fn: AnyFunction) {\n this.subscribers.push(fn);\n },\n unsubscribe(fn: AnyFunction) {\n const idx = this.subscribers.indexOf(fn);\n if (idx >= 0) {\n this.subscribers.splice(idx, 1);\n }\n },\n };\n}\n\nexport default class WebpackHotReload extends Service {\n declare container: any;\n @service() router!: RouterService;\n\n constructor(...args: any) {\n super(...args);\n if (!(window as any).emberHotReloadPlugin) return;\n const app = (getOwner(this) as ApplicationInstance)!.application as any;\n (window as any).emberHotReloadPlugin.Resolver = app.Resolver;\n modulePrefix = app.modulePrefix;\n podModulePrefix = app.podModulePrefix;\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this.router._router;\n // eslint-disable-next-line ember/no-private-routing-service\n Object.defineProperty(this.router._router, '_routerMicrolib', {\n set(v) {\n const getRoute = v.getRoute;\n v.getRoute = function (name: string) {\n const route = getRoute.call(\n this,\n `${name}--hot-version--${(window as any).emberHotReloadPlugin.routerVersion}`,\n );\n route.fullRouteName = `route:${name}`.replace(\n /--hot-version--.*$/,\n '',\n );\n return route;\n };\n this.___routerMicrolib = v;\n },\n get() {\n return this.___routerMicrolib;\n },\n });\n this.container = (getOwner(this) as any)?.__container__;\n (window as any).emberHotReloadPlugin.subscribe(\n (oldModule: any, _newModule: any) => {\n let changed = false;\n if (\n oldModule.exports.default?.prototype &&\n oldModule.exports.default.prototype instanceof Router\n ) {\n changed = true;\n }\n if (\n oldModule.exports.default?.prototype &&\n oldModule.exports.default.prototype instanceof Controller\n ) {\n changed = true;\n }\n if (\n oldModule.id.startsWith('app/templates/') &&\n !oldModule.id.startsWith('app/templates/components/')\n ) {\n changed = true;\n }\n if (oldModule.id.startsWith(`./${podModulePrefix}/`)) {\n changed = true;\n }\n if (!changed) return;\n (window as any).emberHotReloadPlugin.routerVersion += 1;\n const types = [\n 'route',\n 'controller',\n 'template',\n 'modifier',\n 'helper',\n 'component',\n ];\n Object.keys(this.container.cache).forEach((k) => {\n if (types.some((t) => k.startsWith(`${t}:`))) {\n delete this.container.cache[k];\n }\n });\n Object.keys(this.container.factoryManagerCache).forEach((k) => {\n if (types.some((t) => k.startsWith(`${t}:`))) {\n delete this.container.factoryManagerCache[k];\n }\n });\n Object.keys(this.container.registry._resolveCache).forEach((k) => {\n if (types.some((t) => k.startsWith(`${t}:`))) {\n delete this.container.registry._resolveCache[k];\n }\n });\n Object.keys(this.container.validationCache).forEach((k) => {\n if (types.some((t) => k.startsWith(`${t}:`))) {\n delete this.container.validationCache[k];\n }\n });\n Object.keys(this.container.registry.registrations).forEach((k) => {\n if (types.some((t) => k.startsWith(`${t}:`))) {\n delete this.container.registry.registrations[k];\n }\n });\n if (\n oldModule.exports.default?.prototype &&\n oldModule.exports.default.prototype instanceof Router\n ) {\n this.router.refresh();\n }\n if (\n oldModule.exports.default?.prototype &&\n oldModule.exports.default.prototype instanceof Controller\n ) {\n this.router.refresh();\n }\n if (\n oldModule.id.startsWith('app/templates/') &&\n !oldModule.id.startsWith('app/templates/components/')\n ) {\n this.router.refresh();\n }\n if (oldModule.id.startsWith(`./${podModulePrefix}/`)) {\n this.router.refresh();\n }\n },\n );\n }\n getLatestChange(obj: any) {\n return getLatestChange(obj);\n }\n}\n\n// Don't remove this declaration: this is what enables TypeScript to resolve\n// this service using `Owner.lookup('service:hot-reload')`, as well\n// as to check when you pass the service name as an argument to the decorator,\n// like `@service('hot-reload') declare altName: HotReloadService;`.\ndeclare module '@ember/service' {\n interface Registry {\n 'hot-reload': WebpackHotReload;\n }\n}\n"],"names":["ChangeMap","WeakMap","getLatestChange","obj","has","get","modulePrefix","podModulePrefix","module","hot","ModuleMap","Map","window","emberHotReloadPlugin","Resolver","_accepting","changed","subscribers","version","routerVersion","moduleDepCallbacks","versionMap","clear","id","register","dep","callback","replace","RegExp","push","loadNew","oldModule","newModule","set","entry","Object","entries","explicitModules","find","_name","default","exports","__import","moduleUrl","canAcceptNew","m","split","setTimeout","notifyNew","ok","includes","match","old","new","values","forEach","change","fn","subscribe","unsubscribe","idx","indexOf","splice","WebpackHotReload","_dec","service","_class","Service","constructor","args","_initializerDefineProperty","_descriptor","app","getOwner","application","router","_router","defineProperty","v","getRoute","name","route","call","fullRouteName","___routerMicrolib","container","__container__","_newModule","prototype","Router","Controller","startsWith","types","keys","cache","k","some","t","factoryManagerCache","registry","_resolveCache","validationCache","registrations","refresh","_applyDecoratedDescriptor","configurable","enumerable","writable","initializer"],"mappings":";;;;;;;AAUA,MAAMA,SAAS,GAAG,IAAIC,OAAO,EAAE;AAE/B,SAASC,eAAeA,CAACC,GAAQ,EAAE;AACjC,EAAA,OAAOH,SAAS,CAACI,GAAG,CAACD,GAAG,CAAC,EAAE;AACzBA,IAAAA,GAAG,GAAGH,SAAS,CAACK,GAAG,CAACF,GAAG,CAAC;AAC1B;AACA,EAAA,OAAOA,GAAG;AACZ;AAEA,IAAIG,YAAqB;AACzB,IAAIC,eAAwB;AAC5B,IAAKC,MAAM,CAASC,GAAG,EAAE;AACvB,EAAA,MAAMC,SAAS,GAAG,IAAIC,GAAG,EAAE;EAE1BC,MAAM,CAASC,oBAAoB,GAAG;AACrCC,IAAAA,QAAQ,EAAE,IAAI;AACdC,IAAAA,UAAU,EAAE,CAAC;IACbC,OAAO,EAAE,EAAE;AACXC,IAAAA,WAAW,EAAE,EAAE;AACfC,IAAAA,OAAO,EAAE,CAAC;AACVC,IAAAA,aAAa,EAAE,CAAC;IAChBC,kBAAkB,EAAE,EAAE;IACtBC,UAAU,EAAE,EAAE;IAEdC,KAAKA,CAACd,MAAc,EAAE;MACpB,IAAI,CAACY,kBAAkB,CAACZ,MAAM,CAACe,EAAE,CAAC,GAAG,EAAE;KACxC;AACDC,IAAAA,QAAQA,CAAChB,MAAc,EAAEiB,GAAW,EAAEC,QAAqB,EAAE;AAC3DD,MAAAA,GAAG,GAAGA,GAAG,CAACE,OAAO,CAAC,IAAIC,MAAM,CAAC,CAAA,CAAA,EAAItB,YAAY,CAAA,CAAA,CAAG,CAAC,EAAE,IAAI,CAAC;MACxD,IAAI,CAACc,kBAAkB,CAACZ,MAAM,CAACe,EAAE,CAAC,CAAEE,GAAG,CAAC,GACtC,IAAI,CAACL,kBAAkB,CAACZ,MAAM,CAACe,EAAE,CAAC,CAAEE,GAAG,CAAC,IAAK,EAAoB;AACnE,MAAA,IAAI,CAACL,kBAAkB,CAACZ,MAAM,CAACe,EAAE,CAAC,CAAEE,GAAG,CAAC,CAAEI,IAAI,CAACH,QAAQ,CAAC;KACzD;AACDI,IAAAA,OAAOA,CAACC,SAAiB,EAAEC,SAAiB,EAAE;MAC5CtB,SAAS,CAACuB,GAAG,CAACD,SAAS,CAACT,EAAE,EAAES,SAAS,CAAC;MACtC,IAAI,CAACX,UAAU,CAACW,SAAS,CAACT,EAAE,CAAC,GAAGS,SAAS,CAACd,OAAO;AACjD,MAAA,MAAMgB,KAAK,GAAGC,MAAM,CAACC,OAAO,CAC1B,IAAI,CAACtB,QAAQ,CAACuB,eAChB,CAAC,CAACC,IAAI,CAAC,CAAC,CAACC,KAAK,EAAE/B,MAAM,CAAC,KAAKA,MAAM,CAACgC,OAAO,KAAKT,SAAS,CAACU,OAAO,CAACD,OAAO,CAAC;MACzE,IAAI,CAACN,KAAK,EAAE;AACZ,MAAA,IAAI,CAACpB,QAAQ,CAACuB,eAAe,CAACH,KAAK,CAAC,CAAC,CAAC,CAAC,GAAGF,SAAS,CAACS,OAAO;KAC5D;IAEDC,QAAQA,CAACC,SAAiB,EAAE;AAC1B,MAAA,OAAO,yBAA0BA,SAAS,CAAC;KAC5C;IAED,MAAMC,YAAYA,CAACD,SAAiB,EAAE;MACpC,IAAI,CAAC5B,UAAU,IAAI,CAAC;MACpB,MAAM8B,CAAC,GAAG,MAAM,IAAI,CAACH,QAAQ,CAACC,SAAS,CAAC;AACxC,MAAA,MAAMnC,MAAc,GAAG;AACrBiC,QAAAA,OAAO,EAAEI,CAAC;AACVtB,QAAAA,EAAE,EAAEoB,SAAS,CAACG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAEnB,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC;AAC/DT,QAAAA,OAAO,EAAE;OACV;MACD,IAAI,CAACH,UAAU,IAAI,CAAC;AACpB,MAAA,IAAI,IAAI,CAACA,UAAU,KAAK,CAAC,EAAE;QACzBgC,UAAU,CAAC,MAAM,IAAI,CAACC,SAAS,EAAE,EAAE,CAAC,CAAC;AACvC;MACA,MAAMC,EAAE,GACNzC,MAAM,CAACe,EAAE,CAAC2B,QAAQ,CAAC,UAAU,CAAC,IAC9B1C,MAAM,CAACe,EAAE,CAAC2B,QAAQ,CAAC,WAAW,CAAC,IAC/B1C,MAAM,CAACe,EAAE,CAAC2B,QAAQ,CAAC,eAAe,CAAC,IACnC1C,MAAM,CAACe,EAAE,CAAC2B,QAAQ,CAAC,aAAa,CAAC,IACjC1C,MAAM,CAACe,EAAE,CAAC4B,KAAK,CAAC,sBAAsB,CAAC,IACvC3C,MAAM,CAACe,EAAE,CAAC4B,KAAK,CAAC,qBAAqB,CAAC;MACxC,IAAI,CAACF,EAAE,EAAE;AACP,QAAA,OAAO,KAAK;AACd;AAEA,MAAA,IAAIzC,MAAM,CAACe,EAAE,CAAC2B,QAAQ,CAAC,WAAW,CAAC,IAAI1C,MAAM,CAACe,EAAE,CAAC2B,QAAQ,CAAC,YAAY,CAAC,EAAE;AACvE,QAAA,OAAO,KAAK;AACd;MAEA,IAAIxC,SAAS,CAACL,GAAG,CAACG,MAAM,CAACe,EAAE,CAAC,EAAE;AAC5B,QAAA,IAAI,CAACP,OAAO,CAACR,MAAM,CAACe,EAAE,CAAC,GAAG;UACxB6B,GAAG,EAAE1C,SAAS,CAACL,GAAG,CAACG,MAAM,CAACe,EAAE,CAAC;AAC7B8B,UAAAA,GAAG,EAAE7C;SACN;AACH,OAAC,MAAM;QACLE,SAAS,CAACuB,GAAG,CAACzB,MAAM,CAACe,EAAE,EAAEf,MAAM,CAAC;AAClC;AACAA,MAAAA,MAAM,CAACU,OAAO,GAAG,IAAI,CAACA,OAAO;AAC7B,MAAA,OAAO,IAAI;KACZ;AACD8B,IAAAA,SAASA,GAAG;MACV,IAAI,CAAC9B,OAAO,IAAI,CAAC;MACjBiB,MAAM,CAACmB,MAAM,CAAC,IAAI,CAACtC,OAAO,CAAC,CAACuC,OAAO,CAAEC,MAAW,IAAK;QACnD,IAAI,CAAC1B,OAAO,CAAC0B,MAAM,CAACJ,GAAG,EAAEI,MAAM,CAACH,GAAG,CAAC;AACpC,QAAA,IAAI,CAACpC,WAAW,CAACsC,OAAO,CAAEE,EAAO,IAAKA,EAAE,CAACD,MAAM,CAACJ,GAAG,EAAEI,MAAM,CAACH,GAAG,CAAC,CAAC;AACnE,OAAC,CAAC;AACF,MAAA,IAAI,CAACrC,OAAO,GAAG,EAAE;KAClB;IACD0C,SAASA,CAACD,EAAe,EAAE;AACzB,MAAA,IAAI,CAACxC,WAAW,CAACY,IAAI,CAAC4B,EAAE,CAAC;KAC1B;IACDE,WAAWA,CAACF,EAAe,EAAE;MAC3B,MAAMG,GAAG,GAAG,IAAI,CAAC3C,WAAW,CAAC4C,OAAO,CAACJ,EAAE,CAAC;MACxC,IAAIG,GAAG,IAAI,CAAC,EAAE;QACZ,IAAI,CAAC3C,WAAW,CAAC6C,MAAM,CAACF,GAAG,EAAE,CAAC,CAAC;AACjC;AACF;GACD;AACH;AAAA,IAEqBG,gBAAgB,IAAAC,IAAA,GAElCC,OAAO,EAAC,EAAAC,MAAA,GAFI,MAAMH,gBAAgB,SAASI,OAAO,CAAC;EAIpDC,WAAWA,CAAC,GAAGC,IAAS,EAAE;IACxB,KAAK,CAAC,GAAGA,IAAI,CAAC;AAAAC,IAAAA,0BAAA,iBAAAC,WAAA,EAAA,IAAA,CAAA;AACd,IAAA,IAAI,CAAE3D,MAAM,CAASC,oBAAoB,EAAE;AAC3C,IAAA,MAAM2D,GAAG,GAAIC,QAAQ,CAAC,IAAI,CAAC,CAA0BC,WAAkB;AACtE9D,IAAAA,MAAM,CAASC,oBAAoB,CAACC,QAAQ,GAAG0D,GAAG,CAAC1D,QAAQ;IAC5DR,YAAY,GAAGkE,GAAG,CAAClE,YAAY;IAC/BC,eAAe,GAAGiE,GAAG,CAACjE,eAAe;AACrC;IACA,IAAI,CAACoE,MAAM,CAACC,OAAO;AACnB;IACAzC,MAAM,CAAC0C,cAAc,CAAC,IAAI,CAACF,MAAM,CAACC,OAAO,EAAE,iBAAiB,EAAE;MAC5D3C,GAAGA,CAAC6C,CAAC,EAAE;AACL,QAAA,MAAMC,QAAQ,GAAGD,CAAC,CAACC,QAAQ;AAC3BD,QAAAA,CAAC,CAACC,QAAQ,GAAG,UAAUC,IAAY,EAAE;AACnC,UAAA,MAAMC,KAAK,GAAGF,QAAQ,CAACG,IAAI,CACzB,IAAI,EACJ,CAAGF,EAAAA,IAAI,kBAAmBpE,MAAM,CAASC,oBAAoB,CAACM,aAAa,EAC7E,CAAC;AACD8D,UAAAA,KAAK,CAACE,aAAa,GAAG,CAAA,MAAA,EAASH,IAAI,CAAA,CAAE,CAACrD,OAAO,CAC3C,oBAAoB,EACpB,EACF,CAAC;AACD,UAAA,OAAOsD,KAAK;SACb;QACD,IAAI,CAACG,iBAAiB,GAAGN,CAAC;OAC3B;AACDzE,MAAAA,GAAGA,GAAG;QACJ,OAAO,IAAI,CAAC+E,iBAAiB;AAC/B;AACF,KAAC,CAAC;IACF,IAAI,CAACC,SAAS,GAAIZ,QAAQ,CAAC,IAAI,CAAC,EAAUa,aAAa;IACtD1E,MAAM,CAASC,oBAAoB,CAAC6C,SAAS,CAC5C,CAAC3B,SAAc,EAAEwD,UAAe,KAAK;MACnC,IAAIvE,OAAO,GAAG,KAAK;AACnB,MAAA,IACEe,SAAS,CAACU,OAAO,CAACD,OAAO,EAAEgD,SAAS,IACpCzD,SAAS,CAACU,OAAO,CAACD,OAAO,CAACgD,SAAS,YAAYC,MAAM,EACrD;AACAzE,QAAAA,OAAO,GAAG,IAAI;AAChB;AACA,MAAA,IACEe,SAAS,CAACU,OAAO,CAACD,OAAO,EAAEgD,SAAS,IACpCzD,SAAS,CAACU,OAAO,CAACD,OAAO,CAACgD,SAAS,YAAYE,UAAU,EACzD;AACA1E,QAAAA,OAAO,GAAG,IAAI;AAChB;AACA,MAAA,IACEe,SAAS,CAACR,EAAE,CAACoE,UAAU,CAAC,gBAAgB,CAAC,IACzC,CAAC5D,SAAS,CAACR,EAAE,CAACoE,UAAU,CAAC,2BAA2B,CAAC,EACrD;AACA3E,QAAAA,OAAO,GAAG,IAAI;AAChB;MACA,IAAIe,SAAS,CAACR,EAAE,CAACoE,UAAU,CAAC,CAAKpF,EAAAA,EAAAA,eAAe,CAAG,CAAA,CAAA,CAAC,EAAE;AACpDS,QAAAA,OAAO,GAAG,IAAI;AAChB;MACA,IAAI,CAACA,OAAO,EAAE;AACbJ,MAAAA,MAAM,CAASC,oBAAoB,CAACM,aAAa,IAAI,CAAC;AACvD,MAAA,MAAMyE,KAAK,GAAG,CACZ,OAAO,EACP,YAAY,EACZ,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,CACZ;AACDzD,MAAAA,MAAM,CAAC0D,IAAI,CAAC,IAAI,CAACR,SAAS,CAACS,KAAK,CAAC,CAACvC,OAAO,CAAEwC,CAAC,IAAK;AAC/C,QAAA,IAAIH,KAAK,CAACI,IAAI,CAAEC,CAAC,IAAKF,CAAC,CAACJ,UAAU,CAAC,CAAGM,EAAAA,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC,EAAE;AAC5C,UAAA,OAAO,IAAI,CAACZ,SAAS,CAACS,KAAK,CAACC,CAAC,CAAC;AAChC;AACF,OAAC,CAAC;AACF5D,MAAAA,MAAM,CAAC0D,IAAI,CAAC,IAAI,CAACR,SAAS,CAACa,mBAAmB,CAAC,CAAC3C,OAAO,CAAEwC,CAAC,IAAK;AAC7D,QAAA,IAAIH,KAAK,CAACI,IAAI,CAAEC,CAAC,IAAKF,CAAC,CAACJ,UAAU,CAAC,CAAGM,EAAAA,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC,EAAE;AAC5C,UAAA,OAAO,IAAI,CAACZ,SAAS,CAACa,mBAAmB,CAACH,CAAC,CAAC;AAC9C;AACF,OAAC,CAAC;AACF5D,MAAAA,MAAM,CAAC0D,IAAI,CAAC,IAAI,CAACR,SAAS,CAACc,QAAQ,CAACC,aAAa,CAAC,CAAC7C,OAAO,CAAEwC,CAAC,IAAK;AAChE,QAAA,IAAIH,KAAK,CAACI,IAAI,CAAEC,CAAC,IAAKF,CAAC,CAACJ,UAAU,CAAC,CAAGM,EAAAA,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC,EAAE;UAC5C,OAAO,IAAI,CAACZ,SAAS,CAACc,QAAQ,CAACC,aAAa,CAACL,CAAC,CAAC;AACjD;AACF,OAAC,CAAC;AACF5D,MAAAA,MAAM,CAAC0D,IAAI,CAAC,IAAI,CAACR,SAAS,CAACgB,eAAe,CAAC,CAAC9C,OAAO,CAAEwC,CAAC,IAAK;AACzD,QAAA,IAAIH,KAAK,CAACI,IAAI,CAAEC,CAAC,IAAKF,CAAC,CAACJ,UAAU,CAAC,CAAGM,EAAAA,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC,EAAE;AAC5C,UAAA,OAAO,IAAI,CAACZ,SAAS,CAACgB,eAAe,CAACN,CAAC,CAAC;AAC1C;AACF,OAAC,CAAC;AACF5D,MAAAA,MAAM,CAAC0D,IAAI,CAAC,IAAI,CAACR,SAAS,CAACc,QAAQ,CAACG,aAAa,CAAC,CAAC/C,OAAO,CAAEwC,CAAC,IAAK;AAChE,QAAA,IAAIH,KAAK,CAACI,IAAI,CAAEC,CAAC,IAAKF,CAAC,CAACJ,UAAU,CAAC,CAAGM,EAAAA,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC,EAAE;UAC5C,OAAO,IAAI,CAACZ,SAAS,CAACc,QAAQ,CAACG,aAAa,CAACP,CAAC,CAAC;AACjD;AACF,OAAC,CAAC;AACF,MAAA,IACEhE,SAAS,CAACU,OAAO,CAACD,OAAO,EAAEgD,SAAS,IACpCzD,SAAS,CAACU,OAAO,CAACD,OAAO,CAACgD,SAAS,YAAYC,MAAM,EACrD;AACA,QAAA,IAAI,CAACd,MAAM,CAAC4B,OAAO,EAAE;AACvB;AACA,MAAA,IACExE,SAAS,CAACU,OAAO,CAACD,OAAO,EAAEgD,SAAS,IACpCzD,SAAS,CAACU,OAAO,CAACD,OAAO,CAACgD,SAAS,YAAYE,UAAU,EACzD;AACA,QAAA,IAAI,CAACf,MAAM,CAAC4B,OAAO,EAAE;AACvB;AACA,MAAA,IACExE,SAAS,CAACR,EAAE,CAACoE,UAAU,CAAC,gBAAgB,CAAC,IACzC,CAAC5D,SAAS,CAACR,EAAE,CAACoE,UAAU,CAAC,2BAA2B,CAAC,EACrD;AACA,QAAA,IAAI,CAAChB,MAAM,CAAC4B,OAAO,EAAE;AACvB;MACA,IAAIxE,SAAS,CAACR,EAAE,CAACoE,UAAU,CAAC,CAAKpF,EAAAA,EAAAA,eAAe,CAAG,CAAA,CAAA,CAAC,EAAE;AACpD,QAAA,IAAI,CAACoE,MAAM,CAAC4B,OAAO,EAAE;AACvB;AACF,KACF,CAAC;AACH;EACArG,eAAeA,CAACC,GAAQ,EAAE;IACxB,OAAOD,eAAe,CAACC,GAAG,CAAC;AAC7B;AACF,CAAA,EAAAoE,WAAA,GAAAiC,yBAAA,CAAAtC,MAAA,CAAAsB,SAAA,EAAA,QAAA,EAAA,CAAAxB,IAAA,CAAA,EAAA;EAAAyC,YAAA,EAAA,IAAA;EAAAC,UAAA,EAAA,IAAA;EAAAC,QAAA,EAAA,IAAA;EAAAC,WAAA,EAAA;AAAA,CAAA,CAAA,EAAA1C,MAAA;AAGA;AACA;AACA;;;;"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hotAstProcessor = void 0;
|
|
4
|
+
exports.default = hotReplaceAst;
|
|
5
|
+
const core_1 = require("@babel/core");
|
|
6
|
+
const glimmer = require("@glimmer/syntax");
|
|
7
|
+
const babel_import_util_1 = require("babel-import-util");
|
|
8
|
+
class HotAstProcessor {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.options = {
|
|
11
|
+
itsStatic: false,
|
|
12
|
+
};
|
|
13
|
+
this.counter = 0;
|
|
14
|
+
this.meta = {
|
|
15
|
+
locals: new Set(),
|
|
16
|
+
importVar: null,
|
|
17
|
+
babelProgram: undefined,
|
|
18
|
+
importBindings: new Set(),
|
|
19
|
+
};
|
|
20
|
+
this.didCreateImportClass = false;
|
|
21
|
+
this.transform = this.transform.bind(this);
|
|
22
|
+
}
|
|
23
|
+
reset() {
|
|
24
|
+
this.meta.importVar = null;
|
|
25
|
+
this.meta.babelProgram = undefined;
|
|
26
|
+
this.meta.importBindings = new Set();
|
|
27
|
+
}
|
|
28
|
+
transform(env) {
|
|
29
|
+
var _a;
|
|
30
|
+
if (process.env['EMBER_HMR_ENABLED'] !== 'true') {
|
|
31
|
+
return {
|
|
32
|
+
visitor: {},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (!this.meta.babelProgram) {
|
|
36
|
+
return {
|
|
37
|
+
visitor: {},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
if ((_a = env.filename) === null || _a === void 0 ? void 0 : _a.includes('node_modules')) {
|
|
41
|
+
return {
|
|
42
|
+
visitor: {},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
const meta = this.meta;
|
|
46
|
+
const importVar = env.meta.jsutils.bindExpression(meta.importVar || 'null', null, {
|
|
47
|
+
nameHint: 'template__imports__',
|
|
48
|
+
});
|
|
49
|
+
meta.importVar = meta.importVar || importVar;
|
|
50
|
+
return {
|
|
51
|
+
visitor: Object.assign({}, this.buildVisitor({
|
|
52
|
+
importVar,
|
|
53
|
+
importBindings: meta.importBindings,
|
|
54
|
+
babelProgram: meta.babelProgram,
|
|
55
|
+
})),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
buildVisitor({ importVar, importBindings, babelProgram, }) {
|
|
59
|
+
const findImport = function findImport(specifier) {
|
|
60
|
+
return babelProgram.body.find((b) => b.type === 'ImportDeclaration' &&
|
|
61
|
+
b.specifiers.some((s) => s.local.name === specifier));
|
|
62
|
+
};
|
|
63
|
+
const findBlockParams = function (expression, p) {
|
|
64
|
+
if (p.node.type === 'Template') {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
if (p.node &&
|
|
68
|
+
p.node.type === 'BlockStatement' &&
|
|
69
|
+
p.node.program.blockParams.includes(expression)) {
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
const node = p.node;
|
|
73
|
+
if (node && node.blockParams && node.blockParams.includes(expression)) {
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
if (!p.parent)
|
|
77
|
+
return false;
|
|
78
|
+
return findBlockParams(expression, p.parent);
|
|
79
|
+
};
|
|
80
|
+
const visitor = {
|
|
81
|
+
PathExpression: (node, p) => {
|
|
82
|
+
var _a, _b;
|
|
83
|
+
if ((((_a = p.parentNode) === null || _a === void 0 ? void 0 : _a.type) === 'SubExpression' ||
|
|
84
|
+
((_b = p.parentNode) === null || _b === void 0 ? void 0 : _b.type) === 'MustacheStatement') &&
|
|
85
|
+
p.parentNode.params.includes(node)) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const original = node.original.split('.')[0];
|
|
89
|
+
if (original === 'this')
|
|
90
|
+
return;
|
|
91
|
+
if (original.startsWith('@'))
|
|
92
|
+
return;
|
|
93
|
+
if (original === 'block')
|
|
94
|
+
return;
|
|
95
|
+
if (original.startsWith('this.'))
|
|
96
|
+
return;
|
|
97
|
+
if (findBlockParams(original, p))
|
|
98
|
+
return;
|
|
99
|
+
if (node.original === 'helper' ||
|
|
100
|
+
node.original === 'component' ||
|
|
101
|
+
node.original === 'modifier') {
|
|
102
|
+
const parent = p.parentNode;
|
|
103
|
+
if (typeof parent.params[0].original !==
|
|
104
|
+
'string') {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
const original = parent.params[0].original.split('.')[0];
|
|
108
|
+
if (original && findBlockParams(original, p))
|
|
109
|
+
return;
|
|
110
|
+
if (original === null || original === void 0 ? void 0 : original.includes('.'))
|
|
111
|
+
return;
|
|
112
|
+
if (!original)
|
|
113
|
+
return;
|
|
114
|
+
if (findImport(original)) {
|
|
115
|
+
const param = glimmer.builders.path(`${importVar}.${original}`);
|
|
116
|
+
parent.params.splice(0, 1, param);
|
|
117
|
+
importBindings.add(original);
|
|
118
|
+
}
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
if (importVar) {
|
|
122
|
+
if (findImport(node.original)) {
|
|
123
|
+
node.original = `${importVar}.${node.original}`;
|
|
124
|
+
node.parts = node.original.split('.');
|
|
125
|
+
importBindings.add(original);
|
|
126
|
+
}
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
ElementNode: (element, p) => {
|
|
131
|
+
const original = element.tag.split('.')[0];
|
|
132
|
+
if (findBlockParams(original, p))
|
|
133
|
+
return;
|
|
134
|
+
if (importVar) {
|
|
135
|
+
if (findImport(original)) {
|
|
136
|
+
element.tag = `${importVar}.${original}`;
|
|
137
|
+
p.node.tag = element.tag;
|
|
138
|
+
importBindings.add(original);
|
|
139
|
+
}
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
return visitor;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
exports.hotAstProcessor = new HotAstProcessor();
|
|
148
|
+
function hotReplaceAst(babel) {
|
|
149
|
+
const t = babel.types;
|
|
150
|
+
return {
|
|
151
|
+
name: 'a-hot-reload-imports',
|
|
152
|
+
pre(file) {
|
|
153
|
+
exports.hotAstProcessor.reset();
|
|
154
|
+
exports.hotAstProcessor.meta.babelProgram = file.ast.program;
|
|
155
|
+
},
|
|
156
|
+
visitor: {
|
|
157
|
+
Program(path, state) {
|
|
158
|
+
var _a;
|
|
159
|
+
if (!exports.hotAstProcessor.meta.importVar) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
if (process.env['EMBER_HMR_ENABLED'] !== 'true') {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
if ((_a = state.filename) === null || _a === void 0 ? void 0 : _a.includes('node_modules')) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
const util = new babel_import_util_1.ImportUtil(babel, path);
|
|
169
|
+
const tracked = util.import(path, '@glimmer/tracking', 'tracked');
|
|
170
|
+
const klass = t.classExpression(path.scope.generateUidIdentifier('Imports'), null, t.classBody([]));
|
|
171
|
+
const bindings = [...exports.hotAstProcessor.meta.importBindings].sort();
|
|
172
|
+
for (const local of bindings) {
|
|
173
|
+
klass.body.body.push(t.classProperty(t.identifier(local), t.identifier(local), null, [
|
|
174
|
+
t.decorator(tracked),
|
|
175
|
+
]));
|
|
176
|
+
}
|
|
177
|
+
const newExp = t.newExpression(klass, []);
|
|
178
|
+
const assign = t.assignmentExpression('=', t.identifier(exports.hotAstProcessor.meta.importVar), newExp);
|
|
179
|
+
const varDeclaration = path.node.body.findIndex((e) => e.type === 'VariableDeclaration' &&
|
|
180
|
+
e.declarations[0].id.name ===
|
|
181
|
+
exports.hotAstProcessor.meta.importVar) + 1;
|
|
182
|
+
const lastImportIndex = [...path.node.body].findLastIndex((e) => e.type === 'ImportDeclaration') + 1;
|
|
183
|
+
path.node.body.splice(Math.max(varDeclaration, lastImportIndex), 0, assign);
|
|
184
|
+
const findImport = function findImport(specifier) {
|
|
185
|
+
return path.node.body.find((b) => b.type === 'ImportDeclaration' &&
|
|
186
|
+
b.specifiers.some((s) => s.local.name === specifier));
|
|
187
|
+
};
|
|
188
|
+
const ifHotStatements = [];
|
|
189
|
+
console.log('bindings', bindings);
|
|
190
|
+
for (const imp of bindings) {
|
|
191
|
+
console.log('imp', imp);
|
|
192
|
+
const importDeclaration = findImport(imp);
|
|
193
|
+
if (!importDeclaration) {
|
|
194
|
+
console.log('could not find import for ', imp);
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
const source = importDeclaration.source.value;
|
|
198
|
+
// const timestamp = Date.now();
|
|
199
|
+
const ast = (0, core_1.parse)(`
|
|
200
|
+
import.meta.webpackHot.accept('${source}', function () {
|
|
201
|
+
${exports.hotAstProcessor.meta.importVar}.${imp} = ${imp};
|
|
202
|
+
});
|
|
203
|
+
`);
|
|
204
|
+
const accept = ast.program.body;
|
|
205
|
+
ifHotStatements.push(...accept);
|
|
206
|
+
}
|
|
207
|
+
const ifHot = t.ifStatement(t.memberExpression(t.metaProperty(t.identifier('import'), t.identifier('meta')), t.identifier('webpackHot')), t.blockStatement([...ifHotStatements]));
|
|
208
|
+
path.node.body.push(ifHot);
|
|
209
|
+
path.scope.crawl();
|
|
210
|
+
},
|
|
211
|
+
},
|
|
212
|
+
};
|
|
213
|
+
}
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { parse, type PluginObj } from '@babel/core';
|
|
2
|
+
import type * as BabelTypesNamespace from '@babel/types';
|
|
3
|
+
import type { Program, Statement } from '@babel/types';
|
|
4
|
+
import type * as Babel from '@babel/core';
|
|
5
|
+
import * as glimmer from '@glimmer/syntax';
|
|
6
|
+
import { ASTv1, type NodeVisitor, WalkerPath } from '@glimmer/syntax';
|
|
7
|
+
import { ImportUtil } from 'babel-import-util';
|
|
8
|
+
|
|
9
|
+
interface ASTPluginEnvironment {
|
|
10
|
+
locals: string[];
|
|
11
|
+
filename: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
class HotAstProcessor {
|
|
15
|
+
options = {
|
|
16
|
+
itsStatic: false,
|
|
17
|
+
};
|
|
18
|
+
counter = 0;
|
|
19
|
+
meta = {
|
|
20
|
+
locals: new Set<string>(),
|
|
21
|
+
importVar: null,
|
|
22
|
+
babelProgram: undefined,
|
|
23
|
+
importBindings: new Set<string>(),
|
|
24
|
+
} as {
|
|
25
|
+
locals: Set<string>;
|
|
26
|
+
importVar: any;
|
|
27
|
+
importBindings: Set<string>;
|
|
28
|
+
babelProgram?: Program;
|
|
29
|
+
};
|
|
30
|
+
didCreateImportClass: boolean = false;
|
|
31
|
+
|
|
32
|
+
constructor() {
|
|
33
|
+
this.transform = this.transform.bind(this);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
reset() {
|
|
37
|
+
this.meta.importVar = null;
|
|
38
|
+
this.meta.babelProgram = undefined;
|
|
39
|
+
this.meta.importBindings = new Set<string>();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
transform(env: ASTPluginEnvironment): any {
|
|
43
|
+
if (process.env['EMBER_HMR_ENABLED'] !== 'true') {
|
|
44
|
+
return {
|
|
45
|
+
visitor: {},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
if (!this.meta.babelProgram) {
|
|
49
|
+
return {
|
|
50
|
+
visitor: {},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
if (env.filename?.includes('node_modules')) {
|
|
54
|
+
return {
|
|
55
|
+
visitor: {},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
const meta = this.meta as Required<typeof this.meta>;
|
|
59
|
+
const importVar = (env as any).meta.jsutils.bindExpression(
|
|
60
|
+
meta.importVar || 'null',
|
|
61
|
+
null,
|
|
62
|
+
{
|
|
63
|
+
nameHint: 'template__imports__',
|
|
64
|
+
},
|
|
65
|
+
);
|
|
66
|
+
meta.importVar = meta.importVar || importVar;
|
|
67
|
+
return {
|
|
68
|
+
visitor: {
|
|
69
|
+
...this.buildVisitor({
|
|
70
|
+
importVar,
|
|
71
|
+
importBindings: meta.importBindings,
|
|
72
|
+
babelProgram: meta.babelProgram,
|
|
73
|
+
}),
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
buildVisitor({
|
|
79
|
+
importVar,
|
|
80
|
+
importBindings,
|
|
81
|
+
babelProgram,
|
|
82
|
+
}: {
|
|
83
|
+
importVar: string;
|
|
84
|
+
importBindings: Set<string>;
|
|
85
|
+
babelProgram: Program;
|
|
86
|
+
}) {
|
|
87
|
+
const findImport = function findImport(specifier: string) {
|
|
88
|
+
return babelProgram.body.find(
|
|
89
|
+
(b) =>
|
|
90
|
+
b.type === 'ImportDeclaration' &&
|
|
91
|
+
b.specifiers.some((s) => s.local.name === specifier),
|
|
92
|
+
);
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const findBlockParams = function (
|
|
96
|
+
expression: string,
|
|
97
|
+
p: WalkerPath<
|
|
98
|
+
| ASTv1.BlockStatement
|
|
99
|
+
| ASTv1.Block
|
|
100
|
+
| ASTv1.ElementNode
|
|
101
|
+
| ASTv1.PathExpression
|
|
102
|
+
>,
|
|
103
|
+
): boolean {
|
|
104
|
+
if ((p.node as any).type === 'Template') {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
if (
|
|
108
|
+
p.node &&
|
|
109
|
+
p.node.type === 'BlockStatement' &&
|
|
110
|
+
p.node.program.blockParams.includes(expression)
|
|
111
|
+
) {
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
const node = p.node as any;
|
|
115
|
+
if (node && node.blockParams && node.blockParams.includes(expression)) {
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
if (!p.parent) return false;
|
|
119
|
+
return findBlockParams(expression, p.parent as any);
|
|
120
|
+
};
|
|
121
|
+
const visitor: NodeVisitor = {
|
|
122
|
+
PathExpression: (node, p) => {
|
|
123
|
+
if (
|
|
124
|
+
(p.parentNode?.type === 'SubExpression' ||
|
|
125
|
+
p.parentNode?.type === 'MustacheStatement') &&
|
|
126
|
+
p.parentNode.params.includes(node)
|
|
127
|
+
) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const original = node.original.split('.')[0]!;
|
|
131
|
+
if (original === 'this') return;
|
|
132
|
+
if (original.startsWith('@')) return;
|
|
133
|
+
if (original === 'block') return;
|
|
134
|
+
if (original.startsWith('this.')) return;
|
|
135
|
+
if (findBlockParams(original, p)) return;
|
|
136
|
+
if (
|
|
137
|
+
node.original === 'helper' ||
|
|
138
|
+
node.original === 'component' ||
|
|
139
|
+
node.original === 'modifier'
|
|
140
|
+
) {
|
|
141
|
+
const parent = p.parentNode as ASTv1.MustacheStatement;
|
|
142
|
+
if (
|
|
143
|
+
typeof (parent.params[0] as ASTv1.StringLiteral).original !==
|
|
144
|
+
'string'
|
|
145
|
+
) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const original = (
|
|
149
|
+
parent.params[0] as ASTv1.StringLiteral
|
|
150
|
+
).original.split('.')[0];
|
|
151
|
+
if (original && findBlockParams(original, p)) return;
|
|
152
|
+
if (original?.includes('.')) return;
|
|
153
|
+
if (!original) return;
|
|
154
|
+
if (findImport(original)) {
|
|
155
|
+
const param = glimmer.builders.path(`${importVar}.${original}`);
|
|
156
|
+
parent.params.splice(0, 1, param);
|
|
157
|
+
importBindings.add(original);
|
|
158
|
+
}
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (importVar) {
|
|
162
|
+
if (findImport(node.original)) {
|
|
163
|
+
node.original = `${importVar}.${node.original}`;
|
|
164
|
+
node.parts = node.original.split('.');
|
|
165
|
+
importBindings.add(original);
|
|
166
|
+
}
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
ElementNode: (
|
|
171
|
+
element: ASTv1.ElementNode,
|
|
172
|
+
p: WalkerPath<ASTv1.ElementNode>,
|
|
173
|
+
) => {
|
|
174
|
+
const original = element.tag.split('.')[0]!;
|
|
175
|
+
if (findBlockParams(original, p)) return;
|
|
176
|
+
if (importVar) {
|
|
177
|
+
if (findImport(original)) {
|
|
178
|
+
element.tag = `${importVar}.${original}`;
|
|
179
|
+
p.node.tag = element.tag;
|
|
180
|
+
importBindings.add(original);
|
|
181
|
+
}
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
return visitor;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
export const hotAstProcessor = new HotAstProcessor();
|
|
191
|
+
|
|
192
|
+
export default function hotReplaceAst(babel: typeof Babel) {
|
|
193
|
+
const t = babel.types;
|
|
194
|
+
return {
|
|
195
|
+
name: 'a-hot-reload-imports',
|
|
196
|
+
pre(file) {
|
|
197
|
+
hotAstProcessor.reset();
|
|
198
|
+
hotAstProcessor.meta.babelProgram = file.ast.program;
|
|
199
|
+
},
|
|
200
|
+
visitor: {
|
|
201
|
+
Program(path, state) {
|
|
202
|
+
if (!hotAstProcessor.meta.importVar) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
if (process.env['EMBER_HMR_ENABLED'] !== 'true') {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
if (state.filename?.includes('node_modules')) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
const util = new ImportUtil(babel, path);
|
|
212
|
+
const tracked = util.import(path, '@glimmer/tracking', 'tracked');
|
|
213
|
+
const klass = t.classExpression(
|
|
214
|
+
path.scope.generateUidIdentifier('Imports'),
|
|
215
|
+
null,
|
|
216
|
+
t.classBody([]),
|
|
217
|
+
);
|
|
218
|
+
const bindings = [...hotAstProcessor.meta.importBindings].sort();
|
|
219
|
+
for (const local of bindings) {
|
|
220
|
+
klass.body.body.push(
|
|
221
|
+
t.classProperty(t.identifier(local), t.identifier(local), null, [
|
|
222
|
+
t.decorator(tracked),
|
|
223
|
+
]),
|
|
224
|
+
);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
const newExp = t.newExpression(klass, []);
|
|
228
|
+
const assign = t.assignmentExpression(
|
|
229
|
+
'=',
|
|
230
|
+
t.identifier(hotAstProcessor.meta.importVar),
|
|
231
|
+
newExp,
|
|
232
|
+
);
|
|
233
|
+
|
|
234
|
+
const varDeclaration =
|
|
235
|
+
path.node.body.findIndex(
|
|
236
|
+
(e: BabelTypesNamespace.Statement) =>
|
|
237
|
+
e.type === 'VariableDeclaration' &&
|
|
238
|
+
(e.declarations[0]!.id as BabelTypesNamespace.Identifier).name ===
|
|
239
|
+
hotAstProcessor.meta.importVar,
|
|
240
|
+
) + 1;
|
|
241
|
+
|
|
242
|
+
const lastImportIndex =
|
|
243
|
+
[...path.node.body].findLastIndex(
|
|
244
|
+
(e: BabelTypesNamespace.Statement) =>
|
|
245
|
+
e.type === 'ImportDeclaration',
|
|
246
|
+
) + 1;
|
|
247
|
+
|
|
248
|
+
path.node.body.splice(
|
|
249
|
+
Math.max(varDeclaration, lastImportIndex),
|
|
250
|
+
0,
|
|
251
|
+
assign as unknown as Statement,
|
|
252
|
+
);
|
|
253
|
+
|
|
254
|
+
const findImport = function findImport(specifier: string) {
|
|
255
|
+
return path.node.body.find(
|
|
256
|
+
(b) =>
|
|
257
|
+
b.type === 'ImportDeclaration' &&
|
|
258
|
+
b.specifiers.some((s) => s.local.name === specifier),
|
|
259
|
+
);
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
const ifHotStatements = [];
|
|
263
|
+
console.log('bindings', bindings);
|
|
264
|
+
for (const imp of bindings) {
|
|
265
|
+
console.log('imp', imp);
|
|
266
|
+
const importDeclaration = findImport(
|
|
267
|
+
imp,
|
|
268
|
+
) as BabelTypesNamespace.ImportDeclaration;
|
|
269
|
+
if (!importDeclaration) {
|
|
270
|
+
console.log('could not find import for ', imp);
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
const source = importDeclaration.source.value;
|
|
274
|
+
// const timestamp = Date.now();
|
|
275
|
+
const ast = parse(`
|
|
276
|
+
import.meta.webpackHot.accept('${source}', function () {
|
|
277
|
+
${hotAstProcessor.meta.importVar}.${imp} = ${imp};
|
|
278
|
+
});
|
|
279
|
+
`);
|
|
280
|
+
const accept = ast!.program.body;
|
|
281
|
+
ifHotStatements.push(...accept);
|
|
282
|
+
}
|
|
283
|
+
const ifHot = t.ifStatement(
|
|
284
|
+
t.memberExpression(
|
|
285
|
+
t.metaProperty(t.identifier('import'), t.identifier('meta')),
|
|
286
|
+
t.identifier('webpackHot'),
|
|
287
|
+
),
|
|
288
|
+
t.blockStatement([...ifHotStatements]),
|
|
289
|
+
);
|
|
290
|
+
path.node.body.push(ifHot);
|
|
291
|
+
path.scope.crawl();
|
|
292
|
+
},
|
|
293
|
+
},
|
|
294
|
+
} as PluginObj;
|
|
295
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
function hmr() {
|
|
2
|
+
return {
|
|
3
|
+
name: 'hmr-plugin',
|
|
4
|
+
|
|
5
|
+
transform(source, resourcePath) {
|
|
6
|
+
if (process.env['EMBER_HMR_ENABLED'] !== 'true') {
|
|
7
|
+
return source;
|
|
8
|
+
}
|
|
9
|
+
const supportedPaths = ['routers', 'controllers', 'routes', 'templates'];
|
|
10
|
+
const supportedFileNames = [
|
|
11
|
+
'route.js',
|
|
12
|
+
'route.ts',
|
|
13
|
+
'route.gts',
|
|
14
|
+
'route.gjs',
|
|
15
|
+
'controller.js',
|
|
16
|
+
'controller.ts',
|
|
17
|
+
];
|
|
18
|
+
if (resourcePath.includes('/-components/')) {
|
|
19
|
+
return source;
|
|
20
|
+
}
|
|
21
|
+
if (
|
|
22
|
+
!supportedPaths.some((s) => resourcePath.includes(`/${s}/`)) &&
|
|
23
|
+
!supportedFileNames.some((s) => resourcePath.endsWith(s))
|
|
24
|
+
) {
|
|
25
|
+
return source;
|
|
26
|
+
}
|
|
27
|
+
if (
|
|
28
|
+
supportedPaths.includes('templates') &&
|
|
29
|
+
supportedPaths.includes('components')
|
|
30
|
+
) {
|
|
31
|
+
return source;
|
|
32
|
+
}
|
|
33
|
+
return `${source}
|
|
34
|
+
if (import.meta.hot && window.emberHotReloadPlugin) {
|
|
35
|
+
const result = window.emberHotReloadPlugin.canAcceptNew(import.meta.url);
|
|
36
|
+
result.then(() => {
|
|
37
|
+
if (!result) {
|
|
38
|
+
import.meta.hot.decline();
|
|
39
|
+
} else {
|
|
40
|
+
import.meta.hot.accept()
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
`;
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const hmrPlugin = hmr();
|
|
50
|
+
|
|
51
|
+
module.exports = function (source) {
|
|
52
|
+
return hmrPlugin.transform(source, this.resourcePath);
|
|
53
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"rootDir": ".",
|
|
4
|
+
"emitDeclarationOnly": false,
|
|
5
|
+
"outDir": "../dist/utils",
|
|
6
|
+
"target": "ES6",
|
|
7
|
+
"module": "commonjs",
|
|
8
|
+
"moduleResolution": "node",
|
|
9
|
+
"noEmitOnError": false
|
|
10
|
+
},
|
|
11
|
+
"include": [
|
|
12
|
+
"./babel-plugin.ts"
|
|
13
|
+
]
|
|
14
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ember-native",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "the Ember framework with Nativescript",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ember-addon"
|
|
@@ -53,14 +53,16 @@
|
|
|
53
53
|
"rollup-plugin-styles": "^4.0.0"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
+
"babel-import-util": "^3.0.0",
|
|
56
57
|
"router_js": "^8.0.6",
|
|
57
58
|
"nativescript-ui-listview": "^15.2.3",
|
|
58
59
|
"@glimmer/reference": "^0.92.3",
|
|
60
|
+
"@glimmer/interfaces": "^0.92.3",
|
|
59
61
|
"@glimmer/validator": "^0.92.3",
|
|
62
|
+
"@glimmer/runtime": "^0.92.3",
|
|
60
63
|
"loader.js": "^4.7.0",
|
|
61
64
|
"@nativescript/core": "^8.8.4",
|
|
62
65
|
"ember-source": "^5.12.0",
|
|
63
|
-
"@glimmer/runtime": "^0.92.4",
|
|
64
66
|
"@ember/optional-features": "^2.0.0",
|
|
65
67
|
"@embroider/addon-dev": "^7.0.0",
|
|
66
68
|
"@embroider/compat": "^3.6.5",
|
|
@@ -76,8 +78,9 @@
|
|
|
76
78
|
"@release-it-plugins/lerna-changelog": "^5.0.0",
|
|
77
79
|
"@rollup/plugin-babel": "^6.0.3",
|
|
78
80
|
"@tsconfig/ember": "^3.0.8",
|
|
79
|
-
"@types/ember-qunit": "^6.1.1",
|
|
80
81
|
"@types/jquery": "^3.5.16",
|
|
82
|
+
"@types/babel__core": "^7.20.5",
|
|
83
|
+
"@babel/types": "^7.26.0",
|
|
81
84
|
"@types/qunit": "^2.19.5",
|
|
82
85
|
"@types/qunit-dom": "^0.7.0",
|
|
83
86
|
"@typescript-eslint/eslint-plugin": "^8.13.0",
|
|
@@ -132,8 +135,10 @@
|
|
|
132
135
|
"./components/ember-native/RadListView.js": "./dist/_app_/components/ember-native/RadListView.js",
|
|
133
136
|
"./components/ember-native/index.js": "./dist/_app_/components/ember-native/index.js",
|
|
134
137
|
"./instance-initializers/ember-native/history.js": "./dist/_app_/instance-initializers/ember-native/history.js",
|
|
138
|
+
"./instance-initializers/ember-native/webpack-hot-reload.js": "./dist/_app_/instance-initializers/ember-native/webpack-hot-reload.js",
|
|
135
139
|
"./services/ember-native/history.js": "./dist/_app_/services/ember-native/history.js",
|
|
136
|
-
"./services/ember-native/native-router.js": "./dist/_app_/services/ember-native/native-router.js"
|
|
140
|
+
"./services/ember-native/native-router.js": "./dist/_app_/services/ember-native/native-router.js",
|
|
141
|
+
"./services/ember-native/webpack-hot-reload.js": "./dist/_app_/services/ember-native/webpack-hot-reload.js"
|
|
137
142
|
}
|
|
138
143
|
},
|
|
139
144
|
"exports": {
|
|
@@ -157,6 +162,7 @@
|
|
|
157
162
|
"scripts": {
|
|
158
163
|
"build": "concurrently 'npm:build:*'",
|
|
159
164
|
"build:js": "rollup --config",
|
|
165
|
+
"build:utils": "cd utils && tsc --project tsconfig.json || echo 'its okay'",
|
|
160
166
|
"build:types": "glint --declaration && npx fix-bad-declaration-output './declarations/**/*.d.ts'",
|
|
161
167
|
"lint": "concurrently 'npm:lint:*(!fix)' --names 'lint:'",
|
|
162
168
|
"lint:fix": "concurrently 'npm:lint:*:fix' --names 'fix:'",
|